哪些行彼此重复

时间:2019-03-28 08:27:44

标签: pandas duplicates

我有一个包含很多列的数据库。一些行是重复的(在某个子集上)。 现在,我想找出哪一行重复哪一行并将它们放在一起。 例如,假设数据帧是

     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

是否有任何功能可以帮助我做到这一点? 谢谢:)

1 个答案:

答案 0 :(得分:1)

DataFrame.duplicatedkeep=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