使用 NumPy 函数计算 Pandas 中的加权平均值

Posted

技术标签:

【中文标题】使用 NumPy 函数计算 Pandas 中的加权平均值【英文标题】:Calculating weighted average in Pandas using NumPy function 【发布时间】:2020-10-07 03:00:34 【问题描述】:

假设我们有一个这样的 pandas 数据框:

a    b    id 
36   25   2
40   25   3
46   23   2
40   22   5
42   20   5
56   39   3

我想执行一个操作(a div b),然后按 id 分组,最后计算加权平均值,使用“a”作为权重。当我只计算平均值时它才有效。

import pandas as pd
import numpy as np

df = pd.read_csv('file', sep='\s+')
a = (df['a'].div(df['b'])).groupby(df['id']).mean()           # work fine
b = (df['a'].div(df['b'])).groupby(df['dd']).apply(lambda x: np.average(x ??? ), weights=x['a']))

不知道如何将df['a'].div(df['b']的值解析为numpy average函数的第一个参数。有什么想法吗? p>

预期输出:


   id  Weighted Average
0   2          1.754146
1   3          1.504274
2   5          1.962528

【问题讨论】:

您不妨考虑以下帖子:***.com/questions/31521027/… @mcatis 你能发布你的预期输出吗?我的答案是你想要的吗? 【参考方案1】:

您是否希望按id 对加权平均值进行分组?

df.groupby('id').apply(lambda x: np.average(x['b'],weights=x['a'])).reset_index(name='Weighted Average')
Out[1]: 
   id  Weighted Average
0   2         23.878049
1   3         33.166667
2   5         20.975610

或者如果你想做a/b的加权平均:

(df.groupby('id').apply(lambda x: np.average(x['a']/x['b'],weights=x['a']))
 .reset_index(name='Weighted Average'))
Out[2]: 
   id  Weighted Average
0   2          1.754146
1   3          1.504274
2   5          1.962528

【讨论】:

a / b 值的加权平均值是我搜索的内容。您的示例工作很好!谢谢。 @mcatis gotchya,我修改了第二个解决方案。

以上是关于使用 NumPy 函数计算 Pandas 中的加权平均值的主要内容,如果未能解决你的问题,请参考以下文章

numpy/python 中的加权平均值

pandas 学习 第4篇:序列的处理(应用聚合转换映射分组滚动扩展指数加权移动平均)

NumPy 中的加权标准差

Pandas:交换一个数据框中的特定列值并计算其加权平均值

group的加权平均值不等于pandas groupby中的总平均值

numpy pandas读文件 numpy数值计算模块