获取python中每个类别/组的重复值计数

获取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

我有这样一个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        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循环,但没有显示我想要的输出。