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