Pandas DataFrame将单列除以列组的总和

时间:2018-02-12 20:28:54

标签: pandas dataframe aggregate pandas-groupby divide

我正在使用DataFrame,我想找到每个元素对一个组贡献的%。

例如,我有以下数据框

    a
Out[295]: 
  c1  c2  c3
0  a  p1   1
1  b  p1   2
2  c  p2   3
3  d  p3   4

我希望用c2得到每个组的总和,然后用这个总和除以c3。我可以使用groupby函数来获得总和:

b = a.groupby('c2').aggregate({'c3':sum})

b
Out[298]: 
    c3 
c2    
p1   3
p2   3
p3   4

但是,我不知道如何通过这些结果将列c3除以得到以下结果:

  c1  c2  c3
0  a  p1   0.333
1  b  p1   0.667
2  c  p2   1.000
3  d  p3   1.000

1 个答案:

答案 0 :(得分:2)

您可以使用transform

b = a.groupby('c2').c3.transform('sum')
b
Out[451]: 
0    3
1    3
2    3
3    4
Name: c3, dtype: int64
a['c3']/=b
a
Out[453]: 
  c1  c2        c3
0  a  p1  0.333333
1  b  p1  0.666667
2  c  p2  1.000000
3  d  p3  1.000000