Python 按自定义聚合函数分组

Python 按自定义聚合函数分组,python,pandas,group-by,aggregate-functions,Python,Pandas,Group By,Aggregate Functions,在对两列(id和category)执行groupby之后,使用列(col3)上的平均聚合函数,我得到如下结果: col3 id category mean 345 A 12 B 2 C 3 D

在对两列(id和category)执行groupby之后,使用列(col3)上的平均聚合函数,我得到如下结果:

                              col3
id            category        mean
345              A             12
                 B              2
                 C              3
                 D              4
                Total          21
                              col3
id            category        mean    percentage
345              A             12        0.57
                 B              2        0.09
                 C              3        0.14
                 D              4        0.19
                Total          21         1
我想做的是添加一个名为percentage(百分比)的新列,在该列中,我计算每个类别占类别总数的百分比。 对于每个
id
,应分别执行此操作。 结果应该是这样的:

                              col3
id            category        mean
345              A             12
                 B              2
                 C              3
                 D              4
                Total          21
                              col3
id            category        mean    percentage
345              A             12        0.57
                 B              2        0.09
                 C              3        0.14
                 D              4        0.19
                Total          21         1
显然,我希望对每个id都这样做,这是我完成groupby的第一列。有什么建议吗?

这是我的建议:


df['mean']=df['mean']/df['mean'].sum()

s=df[df.index.get_level_values(level=1)!='Total'].sum(level=0)
df['percentage']=df.div(s,level=0,axis=1)
df
Out[422]: 
              mean  percentage
id  category                  
345 A           12    0.571429
    B            2    0.095238
    C            3    0.142857
    D            4    0.190476
    Total       21    1.000000

这不起作用,因为我需要对每个ID分别执行此操作。这样,你就可以考虑整个数据集了。