pandas算加权平均值_python - python-pandas数据框中的加权平均值,给出了权重 - 堆栈内存溢出...

在Python中,可以使用pandas数据框来计算加权平均值。通过将权重与列值相乘,然后求和,可以实现这一目标。示例代码包括直接计算和使用自定义函数weighted_sum的方法,该函数接受权重字典并返回加权平均值。性能测试显示,对于给定数据,此操作在1000次迭代中仅花费1.353ms。
摘要由CSDN通过智能技术生成

您应该乘以列中的值 ,而不是列名本身,例如:

df['weighted_mean']= 0.3*df['size'] + 0.5*df['price'] + 0.2*df['distance']

由于权重之和为1.0,因此这里不需要除法。

对于给定的数据,这将导致:

>>> 0.3*df['size'] + 0.5*df['price'] + 0.2*df['distance']

0 19.0

1 23.0

2 39.0

3 14.5

dtype: float64

我们可以用字典来概括以上内容,例如:

def weighted_sum(df, weights):

return df[list(weights)].mul(weights).sum(axis=1) / sum(weights.values())

例如:

>>> weighted_sum(df, {'size': 0.3, 'price': 0.5, 'distance': 0.2})

0 19.0

1 23.0

2 39.0

3 14.5

dtype: float64

如果所有权重都乘以2,则没有区别:

>>> weighted_sum(df, {'size': 0.6, 'price': 1.0, 'distance': 0.4})

0 19.0

1 23.0

2 39.0

3 14.5

dtype: float64

但是,如果我们增加一个值,则会看到结果不同:

>>> weighted_sum(df, {'size': 0.3, 'price': 1.0, 'distance': 0.2})

0 19.333333

1 25.333333

2 39.333333

3 14.666667

dtype: float64

性能 :如果我们以给定的weighted_sum重在给定的数据集上运行weighted_sum 1'000次,我们将获得以下基准:

>>> timeit(partial(weighted_sum, df, {'size': 0.3, 'price': 1.0, 'distance': 0.2}), number=1000)

1.3530528700212017

因此,在2.70GHz的Intel®Core ™i7-7500U CPU上,此调用的运行时间仅为1.353ms 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值