首页 > 解决方案 > 如何在python中计算加权平均值和中位数?

问题描述

我在 pandas DataFrame 或 NumPy 数组中有数据,并希望根据另一列或数组中的某些权重计算加权平均值(平均值)或加权中位数。我正在寻找一个简单的解决方案,而不是从头开始编写函数或将它们复制粘贴到我需要它们的任何地方。

数据看起来像这样 -

state.head()
    State    Population Murder.Rate Abbreviation
0   Alabama     4779736     5.7     AL
1   Alaska      710231      5.6     AK
2   Arizona     6392017     4.7     AZ
3   Arkansas    2915918     5.6     AR
4   California  37253956    4.4     CA

我想计算weighted mean or median其中murder rate考虑到populations各州的不同。

我怎样才能做到这一点?

标签: pythonpandasdataframestatistics

解决方案


首先,在 python 中安装weightedstats库。

pip install weightedstats

然后,执行以下操作 -

加权平均数

ws.weighted_mean(state['Murder.Rate'], weights=state['Population'])
4.445833981123394

加权中位数

ws.weighted_median(state['Murder.Rate'], weights=state['Population'])
4.4

它还具有用于 numpy 数组的特殊加权平均值和中值方法。上述方法将起作用,但如果您需要的话。

my_data = [1, 2, 3, 4, 5]
my_weights = [10, 1, 1, 1, 9]

ws.numpy_weighted_mean(my_data, weights=my_weights)
ws.numpy_weighted_median(my_data, weights=my_weights)

推荐阅读