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

Pandas DataFrame divide single column by the sum of the column groups

我正在使用 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

您可以使用 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