pd.duplicated()重复组

时间:2018-12-13 11:29:59

标签: pandas group-by

我有一个很大的数据框,其中包含许多列和行,这是许多Excel文件产生的。我想查找导致重复的文件,因为有时文件中部分包含观测值,而观测值不应该包含在Excel文件中。 我知道df [df.duplicated(subset = ['A','B'],keep = False)]给了我所有重复的行。

import pandas as pd
df = pd.DataFrame({'A':[1,1,2,2,2,2,3,3],'B':['Q','Q','R','R','R','P','L','L'],'origin':['file1','file2','file3','file4','file5','file6','file7','file8']})

我希望结果看起来像

result = pd.DataFrame({'A':[1,1,2,2,2,3,3],'B':['Q','Q','R','R','R','L','L'],'origin':['file1','file2','file3','file4','file5','file7','file8'],'group':['g1','g1','g2','g2','g2','g3','g3'],'duplicate_count':[2,2,3,3,3,2,2]})

但是,我想始终将两个(或更多)对应的重复项分组,然后打印对应的文件和重复项发生的次数。我没有成功找到答案。

1 个答案:

答案 0 :(得分:3)

duplicatedkeep='False'一起使用,按boolean indexing过滤所有重复项,然后过滤sort_values,对于每组数字使用ngroup,对计数{{3} }与transform

cols = ['A','B']
df1 = df[df.duplicated(subset=cols,keep=False)].copy()
df1 = df1.sort_values(cols)
df1['group'] = 'g' + (df1.groupby(cols).ngroup() + 1).astype(str)
df1['duplicate_count'] = df1.groupby(cols)['origin'].transform('size')
print (df1)
   A  B origin group  duplicate_count
0  1  Q  file1    g1                2
1  1  Q  file2    g1                2
2  2  R  file3    g2                3
3  2  R  file4    g2                3
4  2  R  file5    g2                3
6  3  L  file7    g3                2
7  3  L  file8    g3                2