如果任何列中的值位于之前,则删除行

时间:2020-02-14 01:11:21

标签: python pandas duplicates

如果一个值出现在之前的一行中,但出现在前两列中的任何一列中,则我需要从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之前出现过,该如何删除它呢?

毕竟,我希望有一个新的df,它仅包含每个id的第一个外观,而无论第一个观察值在哪个列中。

理想的df应该如下所示:

id_a

我知道我可以先进行id_b 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 的{​​{1}}子集设置,但是如果同一id在2个不同的列中,则不会删除该行。

1 个答案:

答案 0 :(得分:4)

让我们用stack + unstackduplicated

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