【问题标题】:Drop rows if value is before in any column如果值在任何列之前,则删除行
【发布时间】:2020-02-14 10:49:13
【问题描述】:

如果一个值出现在之前的一行中,但在前两列中的任何一个中,我需要从 df 中删除行。

我的 df 看起来像这样:

    id_a  id_b   value
0    NWS   HRD   21.06
1    HPE   ZRF  170.13
2    BAN   NWS  244.44
3    HBI   BCT  304.37
4    JFK   AQE  314.12
5    AQE   KEY  324.82
6    NWS   KLM  314.12

例如,NWS 在第 0、2 和 6 行,但并不总是在 id_a 列中,因为它也在 id_b 列中。 AQE 在第 4 行和第 5 行,每次都在不同的列中。如果之前出现id,无论它是在id_a 还是id_b 列中,如何删除一行?

毕竟,我希望有一个新的 df,其中每个 id 的第一次出现,在第一次观察的列中。

理想的df应该是这样的:

    id_a  id_b   value
0    NWS   HRD   21.06
1    HPE   ZRF  170.13
3    HBI   BCT  304.37
4    JFK   AQE  314.12

我知道我可以先通过id_a 和第二个id_bdrop_duplicates() 进行子集化,但是如果相同的 id 在 2 个不同的列中,这不会放弃。

【问题讨论】:

标签: python pandas duplicates


【解决方案1】:

让我们用unstack + duplicatedstack

df=df[~df[['id_a','id_b']].stack().duplicated().unstack().any(1)]
  id_a id_b   value
0  NWS  HRD   21.06
1  HPE  ZRF  170.13
3  HBI  BCT  304.37
4  JFK  AQE  314.12

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-14
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多