如果df按A,B和C分组,则看起来像这样:
A B C D
1 53704 hf 51602
51602
53802
ss 53802
53802
2 12811 hf 54205
hx 50503
我尝试了以下内容,类似于另一篇文章中的内容:
df.groupby([df['A'], df['B'], df['C']]).drop_duplicates(cols='D')
这显然是错误的,因为它会产生一个空的数据框.我还尝试了drop_duplicates的另一种变体,该变体简单地从“ D”中删除所有重复项,无论它位于哪个组中.我正在寻找的输出是:
A B C D
1 53704 hf 51602
53802
ss 53802
2 12811 hf 54205
hx 50503
因此,仅当重复项被分组到相同的A / B / C组合中时,它们才会被丢弃.
解决方法:
假设这些只是列,则可以直接使用drop_duplicates
:
In [11]: df.drop_duplicates(cols=list('ABCD'))
Out[11]:
A B C D
0 1 53704 hf 51602
2 1 53704 hf 53802
3 1 53704 ss 53802
5 2 12811 hf 54205
6 2 12811 hx 50503
如果您对所有列的重复项感兴趣,则无需指定:
In [12]: df.drop_duplicates()
Out[12]:
A B C D
0 1 53704 hf 51602
2 1 53704 hf 53802
3 1 53704 ss 53802
5 2 12811 hf 54205
6 2 12811 hx 50503