我有一个包含很多列的数据库。一些行是重复的(在某个子集上)。 现在,我想找出哪一行重复哪一行并将它们放在一起。 例如,假设数据帧是
id A B C
0 0 1 2 0
1 1 2 3 4
2 2 1 4 8
3 3 1 2 3
4 4 2 3 5
5 5 5 6 2
,子集为
['A','B']
我希望这样:
id A B C
0 0 1 2 0
1 3 1 2 3
2 1 2 3 4
3 4 2 3 5
4 2 1 4 8
5 5 5 6 2
是否有任何功能可以帮助我做到这一点? 谢谢:)
答案 0 :(得分:1)
将DataFrame.duplicated
与keep=False
一起用于所有重复对象的蒙版,然后按boolean indexing
进行过滤,按DataFrame.sort_values
进行排序,然后按concat
进行合并:
L = ['A','B']
m = df.duplicated(L, keep=False)
df = pd.concat([df[m].sort_values(L), df[~m]], ignore_index=True)
print (df)
id A B C
0 0 1 2 0
1 3 1 2 3
2 1 2 3 4
3 4 2 3 5
4 2 1 4 8
5 5 5 6 2