让我们以此示例 Dataframe 和此ID列表为例:
df=pd.DataFrame({'Id':['A','A','A','B','C','C','D','D'], 'Weight':[50,20,30,1,2,8,3,2], 'Value':[100,100,100,10,20,20,30,30]})
Id Weight Value
0 A 50 100
1 A 20 100
2 A 30 100
3 B 1 10
4 C 2 20
5 C 8 20
6 D 3 30
7 D 2 30
L = ['A','C']
值列对id列中的每个id具有相同的值。对于l的特定ID,我想将权重列的权重应用于值列。我目前正在采用以下方法,但使用真正的大 Dataframe 速度非常慢:
for i in L :
df.loc[df["Id"]==i,"Value"] = (df.loc[df["Id"]==i,"Value"] * df.loc[df["Id"]==i,"Weight"] /
df[df["Id"]==i]["Weight"].sum())
我怎样才能有效地做到这一点?
预期产出:
Id Weight Value
0 A 50 50
1 A 20 20
2 A 30 30
3 B 1 10
4 C 2 4
5 C 8 16
6 D 3 30
7 D 2 30
1条答案
按热度按时间j5fpnvbx1#
idea仅适用于按筛选的行
Series.isin
具有GroupBy.transform
及sum
对于与原始 Dataframe 大小相同的每个组的总和: