【发布时间】:2020-10-28 19:50:43
【问题描述】:
我正在计算以下数据的加权平均值。我收到 positional indexers are out of bounds 错误。
dfpa:
PA pa_pop pa_mean_ea_kwh
A 30 42431.52608
B 1596 177765.6662
C 193 284501.2339
D 0
E 84 316868.3264
这是我的代码:
wmea = lambda x: np.ma.average(x, weights=(dfpa.loc[x.index, 'pa_mean_ea_kwh'] * dfpa.loc[x.index, 'pa_pop']))
dfsw = dfpa.agg(
sw_pop = ('pa_pop', 'sum'),
sw_mean_ea_kwh = ('pa_mean_ea_kwh', wmea))
过去我曾成功使用过类似的代码,但我的聚合与 groupby 相结合。所以会是
dfsw = dfpa.groupby('PA').agg(
sw_pop = ('pa_pop', 'sum'),
sw_mean_ea_kwh = ('pa_mean_ea_kwh', wmea))
但在这种情况下,我只需要一个输出所有数据。实现这一点的 np.ma.average lambda 函数是否不正确?为什么它不只做一个 sumproduct 然后除以总和?
添加所需的输出:
sw_pop sw_mean_ea_kwh
1903 192597.2814
其中 sw_mean_ea_kwh 计算为 SUMPRODUCT(pa_pop,pa_mean_ea_kwh)/SUM(pa_pop)
ps:有一个替代解决方案 here 来计算加权平均值,但它再次使用 groupby
【问题讨论】:
-
您能否准确说明预期的输出应该是什么样的?你能发布一个输出数据框吗?
-
我已经添加了所需的输出@DavidErickson
标签: python pandas aggregate weighted-average