在多索引上应用pandas groupby聚合

时间:2016-01-22 18:46:37

标签: python pandas

我有一只熊猫DataFrame

                    A

   foo   one        3
         two        2
         three      4
   bar   one        1
         two        5
         three      2

我想根据第一个索引级别中所有行的总和,为每一行添加一个具有相对值的列。 foo中所有值的总和为3 + 2 + 4 = 9,因此第一行的相对值为3/9 = 0.33。

结果DataFrame看起来像这样:

                    A    rel

   foo   one        3     0.33
         two        2     0.22
         three      4     0.44
   bar   one        1     0.125
         two        5     0.625
         three      2     0.25

我已经尝试在DataFrame上使用groupby,但我只能弄清楚如何将方法应用于一个groupby维度。

1 个答案:

答案 0 :(得分:3)

您可以将groupbytransform sum

一起使用
df['rel'] = df.A / df.groupby(level=0)['A'].transform(sum)
print df
           A       rel
foo one    3  0.333333
    two    2  0.222222
    three  4  0.444444
bar one    1  0.125000
    two    5  0.625000
    three  2  0.250000