如果一个值出现在之前的一行中,但出现在前两列中的任何一列中,则我需要从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个不同的列中,则不会删除该行。
答案 0 :(得分:4)
让我们用stack
+ unstack
来duplicated
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