Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于条件的加权和_Python_Pandas - Fatal编程技术网

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())