熊猫在组之间删除重复项

时间:2020-06-23 21:08:46

标签: python pandas

我有一个数据框,我想仅在其中删除组之间的重复项。

   A  B  C  D
0  1  0  2  Group 1
1  1  1  1  Group 2
2  1  1  1  Group 2
3  1  1  1  Group 2  
4  3  8  3  Group 2
5  3  8  3  Group 1
6  2  9  1  Group 2  
7  2  9  1  Group 1
8  1  0  2  Group 1

在上述数据框中,我需要以下输出:

  A  B  C  D
0  1  0  2  Group 1
1  1  1  1  Group 2
2  1  1  1  Group 2
3  1  1  1  Group 2  
8  1  0  2  Group 1

对于每个跨组匹配项(跨组1和2),如果存在配对的匹配项,请将其删除。因此,删除了索引4和5,也删除了索引6和7。您可以看到,组中的重复项没有被删除(索引0,8和2,3)。

对此有任何帮助,我们深表感谢。

2 个答案:

答案 0 :(得分:2)

我们可以做duplicated

df=df[df.duplicated(keep=False)]
   A  B  C       D
0  1  0  2  Group1
1  1  1  1  Group2
2  1  1  1  Group2
3  1  1  1  Group2
8  1  0  2  Group1

更新

df=df.groupby(list('ABC')).filter(lambda x : (x.nunique()==1).all())
   A  B  C       D
0  1  0  2  Group1
1  1  1  1  Group2
2  1  1  1  Group2
3  1  1  1  Group2
8  1  0  2  Group1

答案 1 :(得分:2)

根据您的逻辑,我们可以检查每列A, B, C的列中D中唯一值的数量是否等于1

df[df.groupby(['A', 'B', 'C'])['D'].transform('nunique').eq(1)]

   A  B  C        D
0  1  0  2  Group 1
1  1  1  1  Group 2
2  1  1  1  Group 2
3  1  1  1  Group 2
8  1  0  2  Group 1