2016-01-22 56 views
1

我有一个熊猫DataFrame应用大熊猫GROUPBY聚集在多指标

    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维度。

回答

3

您可以使用groupbytransformsum

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