从 Pandas DataFrame 中选择一列中具有相同值但另一列中具有不同值的行

新手上路,请多包涵

假设我有下面的 pandas DataFrame:

    A      B     C   D
1  foo    one   0   0
2  foo    one   2   4
3  foo    two   4   8
4  cat    one   8   4
5  bar    four  6  12
6  bar    three 7  14
7  bar    four  7  14

我想选择所有在 A 中具有相同值但在 B 中具有不同值的行。所以我希望我的代码输出为:

    A      B    C   D
1  foo    one  0   0
3  foo    two  4   8
5  bar  three  7  14
6  bar    four 7  14

最有效的方法是什么?我有大约 11,000 行,列值变化很大,但这种情况经常出现。在我的数据集中,如果 A 列中的元素相等,则相应的 B 列值也应该相等,但是由于标记错误,情况并非如此,我想解决这个问题,我这样做是不切实际的一。

原文由 tinman248 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
1 个回答

您可以尝试 groupby() + filter + drop_duplicates()

 >>> df.groupby('A').filter(lambda g: len(g) > 1).drop_duplicates(subset=['A', 'B'], keep="first")
     A      B  C   D
0  foo    one  0   0
2  foo    two  4   8
4  bar   four  6  12
5  bar  three  7  14

或者,如果您想在列的子集之间删除重复项 A & B 然后可以在下面使用,但该行将具有 cat 以及

>>> df.drop_duplicates(subset=['A', 'B'], keep="first")
     A      B  C   D
0  foo    one  0   0
2  foo    two  4   8
3  cat    one  8   4
4  bar   four  6  12
5  bar  three  7  14

原文由 Karn Kumar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题