我有一个包含许多列和行的大数据框,这些数据框是由许多 Excel 文件生成的。我想找到导致重复的文件,因为有时文件部分包含不应出现在 Excel 文件中的观察结果。我知道 df[df.duplicate(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']})
Run Code Online (Sandbox Code Playgroud)
我希望结果看起来像
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]})
Run Code Online (Sandbox Code Playgroud)
但是,我希望始终将两个(或更多)相应的重复项分组,然后打印相应的文件以及重复项发生的次数。我没有成功找到答案。
使用duplicatedwithkeep='False'过滤所有重复项boolean indexing,然后sort_values,对于每组的数字,使用ngroup, 进行transform计数size:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2150 次 |
| 最近记录: |