按自定义聚合函数分组

时间:2018-12-02 02:03:11

标签: python pandas group-by aggregate-functions

使用一列(col3)上的均值聚合函数对两列(id和category)执行groupby之后,我会得到这样的信息:

                              col3
id            category        mean
345              A             12
                 B              2
                 C              3
                 D              4
                Total          21

我想做的是添加一个名为percent的新列,在该列中我计算类别Total中每个类别的百分比。 应该为每个id单独完成此操作。 结果应该是这样的:

                              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的第一列。关于如何做到这一点的任何建议?

2 个答案:

答案 0 :(得分:1)

使用get_level_values过滤您的df,然后我们使用div

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

答案 1 :(得分:0)

这是我的建议:

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