使用NumPy函数计算熊猫的加权平均值

时间:2020-10-07 03:00:34

标签: python python-3.x pandas numpy weighted-average

假设我们有一个像这样的熊猫数据框:

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平均函数的第一个参数。有什么想法吗?

预期输出:


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

1 个答案:

答案 0 :(得分:3)

您是否要按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