我有一个很大的数据框,其中包含许多列和行,这是许多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]})
但是,我想始终将两个(或更多)对应的重复项分组,然后打印对应的文件和重复项发生的次数。我没有成功找到答案。
答案 0 :(得分:3)
将duplicated
与keep='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