我有以下数据框。

      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/

10-13 05:30