我有一个数据框,如下所示:
SizeOfExposure
我正在尝试通过Frame
号来计算每个行组的df.groupby("Frame")["SizeOfExposure"].sum()
的百分比。
我尝试了以下操作:
df['SizeOfExpPerc']=df["SizeOfExposure"]/df.groupby("Frame")["SizeOfExposure"].sum()
这将为每个帧打印SizeOfExposure的总和。但是,当我尝试
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
我在大多数行中都填写了“ Nan”。我该如何计算?所需的输出是
.meta {
position: absolute;
right: 0;
text-align: left;
}
答案 0 :(得分:3)
使用GroupBy.transform
来返回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
,其大小与原始DataFrame相同,并用聚合值填充,因此可能的除法:
print (df.groupby("Frame")["SizeOfExposure"].transform('sum'))
0 10
1 10
2 7
3 10
4 10
Name: SizeOfExposure, dtype: int64
详细信息:
{{1}}
答案 1 :(得分:1)
@jezrael的方法可能更有效,但这是使用groupby
和apply
的替代解决方案。
>>> df.assign(SizeOfExpPerc=df.groupby('Frame')['SizeOfExposure'].apply(
lambda group: group / group.sum()))
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