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