我有一个数据框,我想仅在其中删除组之间的重复项。
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)。
对此有任何帮助,我们深表感谢。
答案 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