我有以下数据框。
weight x value
0 5 -8.7 2
1 9 -8.7 3
2 12 -21.4 10
3 32 -21.4 15
我需要获取值的加权平均值并按x分组。结果将是:
-8.7:(5 /(5 + 9)* 2)+((9/14)* 3)= 2.64
-21.4:((12/44)* 10)+((32/44)* 15)= 13.63
x weighted_value
0 -8.7 2.64
1 -21.4 13.63
最佳答案
numpy.average
接受一个weights
参数:
import io
import numpy as np
import pandas as pd
data = io.StringIO('''\
weight x value
0 5 -8.7 2
1 9 -8.7 3
2 12 -21.4 10
3 32 -21.4 15
''')
df = pd.read_csv(data, delim_whitespace=True)
df.groupby('x').apply(lambda g: np.average(g['value'], weights=g['weight']))
输出:
x
-21.4 13.636364
-8.7 2.642857
dtype: float64
关于python - 得到加权平均值,然后按 Pandas 分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39664195/