获取python中每个类别/组的重复值计数
我有这样一个df1:获取python中每个类别/组的重复值计数,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我有这样一个df1: Type Name Identifier Number Amount A xx 0001 12 0.89 xx 0001 56 0.78 zz 0002 33 0.56 yy 0020 44
Type Name Identifier Number Amount
A xx 0001 12 0.89
xx 0001 56 0.78
zz 0002 33 0.56
yy 0020 44 0.45
yy 0020 67 0.45
B ww 0300 12 0.34
ww 0300 54 0.1
kk 0900 43 0.2
我希望获得每种类型的重复标识符的计数,这样生成的数据帧现在看起来像
Type Count_Dups Ave. Amount
A 2 2.345
B 1 0.44
其中,平均金额是所有重复值/重复值计数的总和。(示例:A=(0.89+0.78+0.45+0.45)/2)
我应该使用for循环吗?groupby是否足够?要识别重复项,请按行的类型和标识符对行进行分组:
dups = df.groupby(['Type', 'Identifier'])['Amount']\
.agg(['size', 'sum']).reset_index()
# Type Identifier size sum
#0 A 1 2 1.67
#1 A 2 1 0.56
#2 A 20 2 0.90
#3 B 300 2 0.44
#4 B 900 1 0.20
选择多次出现的行:
dups = dups[dups['size'] > 1]
计算他们的部分金额:
dups_stats = dups.groupby('Type')['sum']\
.agg(['size','sum'])
# size sum
#Type
#A 2 2.57
#B 1 0.44
最后,将总和除以计数得到平均值:
dups_stats['sum'] /= dups_stats['size']
# size sum
#Type
#A 2 1.285
#B 1 0.440
IIUC,你可以用这个方法。将数据帧向下过滤到重复项,然后使用nunique和sum进行分组,最后将两列分开
df_out = df1[df1.duplicated(subset=['Type','Identifier'], keep=False)]\
.groupby('Type')['Identifier','Amount']\
.agg({'Identifier':'nunique','Amount':'sum'})\
.rename(columns={'Identifier':'Count_Dups'})
df_out['Ave. Amount'] = df_out['Amount'] / df_out['Count_Dups']
print(df_out.reset_index())
输出:
Type Count_Dups Amount Ave. Amount
0 A 2 2.57 1.285
1 B 1 0.44 0.440
不清楚“重复标识符的计数”是什么意思,因为在您的示例中,重复的不同标识符的数量总是相同的,因为存在与前一行重复的行。例如,[1,2,3,3,3]的重复计数是1还是2?(0.89+0.78+0.45+0.45)/2不是2.345。您尝试过什么代码?@DSM我想获得每组重复值的计数。在A组中有两个重复的标识符(0001和0002),而在B组中有一个重复的标识符(0300)。@HarvIpan我尝试使用for循环,但没有显示我想要的输出。