首页 > 解决方案 > Python按一列分组并计算另一列的百分比

问题描述

我有一个数据框如下:

    Frame   SizeOfExposure
0    1         5
1    1         5
2    2         7
3    3         2
4    3         8

我正在尝试按数字计算SizeOfExposure每个行组的百分比Frame

我尝试了以下方法:

df.groupby("Frame")["SizeOfExposure"].sum()

这将打印每帧的 SizeOfExposure 总和。但是,当我尝试

df['SizeOfExpPerc']=df["SizeOfExposure"]/df.groupby("Frame")["SizeOfExposure"].sum()

我正在为大多数行填充“Nan”。我该如何计算?所需的输出是

    Frame   SizeOfExposure  SizeOfExpPerc
0    1         5                  0.5
1    1         5                  0.5
2    2         7                  1.0
3    3         2                  0.2
4    3         8                  0.8

标签: pythonpandasgroup-by

解决方案


用于GroupBy.transform返回Series与由聚合值填充的原始 DataFrame 相同大小的返回,因此可能的除法:

df['SizeOfExpPerc']=df["SizeOfExposure"]/df.groupby("Frame")["SizeOfExposure"].transform('sum')
print (df)
   Frame  SizeOfExposure  SizeOfExpPerc
0      1               5            0.5
1      1               5            0.5
2      2               7            1.0
3      3               2            0.2
4      3               8            0.8

详情

print (df.groupby("Frame")["SizeOfExposure"].transform('sum'))
0    10
1    10
2     7
3    10
4    10
Name: SizeOfExposure, dtype: int64

推荐阅读