使用 NumPy 函数计算 Pandas 中的加权平均值
Calculating weighted average in Pandas using NumPy function
假设我们有一个这样的 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 平均函数的第一个参数。有什么想法吗?
预期输出:
id Weighted Average
0 2 1.754146
1 3 1.504274
2 5 1.962528
您是否希望按 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
假设我们有一个这样的 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 平均函数的第一个参数。有什么想法吗?
预期输出:
id Weighted Average
0 2 1.754146
1 3 1.504274
2 5 1.962528
您是否希望按 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