Python 基于条件的加权和
假设您有以下数据集:Python 基于条件的加权和,python,pandas,Python,Pandas,假设您有以下数据集: import pandas as pd data = { "id" : [1,1,2,3,4,4,4,4], "weight" : [0.5, 0.5, 1, 1, 0.25, 0.25, 0.10, 0.40], "val" : [55, 325, 532, 55, 29, 89, 38, 85] } df = pd.DataFrame(data) id weight val 1
import pandas as pd
data = {
"id" : [1,1,2,3,4,4,4,4],
"weight" : [0.5, 0.5, 1, 1, 0.25, 0.25, 0.10, 0.40],
"val" : [55, 325, 532, 55, 29, 89, 38, 85]
}
df = pd.DataFrame(data)
id weight val
1 0.5 55
1 0.5 325
2 1 532
3 1 55
4 0.25 29
4 0.25 89
4 0.10 38
4 0.40 85
也就是说,我们有id列,每个id“组”的权重总和为1,还有一个值列
我想为每个id组创建每个val列的加权和
因此,对于id 1,它将是:
0.5 * 55 + 0.5 * 325 = 190
等等
它应该返回一个具有唯一ID和加权值的结果的新序列
我试过类似的东西
df.groupby("id").apply(lambda (x["val"] * x["weight"]).sum())
但这并不完全正确
感谢所有的帮助 除了@mosc9575的答案外,您还可以避免应用
,并希望通过在获得每组总和之前先计算单个值(权重乘以val)来获得更好的性能:
df.assign(weighted_sum=df.weight.mul(df.val).groupby(df.id).transform("sum"))
id weight val weighted_sum
0 1 0.50 55 190.0
1 1 0.50 325 190.0
2 2 1.00 532 532.0
3 3 1.00 55 55.0
4 4 0.25 29 67.3
5 4 0.25 89 67.3
6 4 0.10 38 67.3
7 4 0.40 85 67.3
检查lambda函数中的输入错误:df.groupby(“id”).apply(lambda x:(x[“val”]*x[“weight”]).sum())