python - 获取加权平均值然后分组到 pandas

标签 python pandas numpy

我有以下数据框。

      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/

相关文章:

python - 使用 pandas 读取带有前导空格的文本文件给出一个 NaN 列

python - 将特征稀疏矩阵与 sklearn 混合的正确方法是什么?

python - 如何在 NumPy 中将三角矩阵转换为正方形?

python - 为什么将我的模块分成多个文件会使它变慢?

python - 从字符串列表中,如何获得 python 中最奇怪的单词/字符串

python 惯用的 python for 循环 if else 语句

python - 在数据框中不使用循环的情况下进行简单的 Excel min 计算

python - 如何将自定义函数并行应用于数组的成对元素?

python - python数据帧的条件求和

python - 在 numpy 中将 2 个图像堆叠在一起