小编典典

使用熊猫/数据框计算加权平均值

python

我有下表。我想根据以下公式计算按每个日期分组的加权平均值。我可以使用一些标准的常规代码来执行此操作,但是假设此数据在pandas数据框中,是否有比通过迭代更简单的方法来实现此目的?

Date        ID      wt      value   w_avg
01/01/2012  100     0.50    60      0.791666667
01/01/2012  101     0.75    80
01/01/2012  102     1.00    100
01/02/2012  201     0.50    100     0.722222222
01/02/2012  202     1.00    80

2012年1月1日w_avg = 0.5 (60 / sum(60,80,100))+ .75 (80 / sum(60,80,100))+ 1.0
*(100 / sum(60,80,100))

2012年1月2日w_avg = 0.5 (100 /总和(100,80))+ 1.0 (80 /总和(100,80))


阅读 258

收藏
2020-12-20

共1个答案

小编典典

我想我会用两个groupby来做到这一点。

首先计算“加权平均值”:

In [11]: g = df.groupby('Date')

In [12]: df.value / g.value.transform("sum") * df.wt
Out[12]:
0    0.125000
1    0.250000
2    0.416667
3    0.277778
4    0.444444
dtype: float64

如果将其设置为列,则可以对其进行分组:

In [13]: df['wa'] = df.value / g.value.transform("sum") * df.wt

现在,此列的总和是所需的:

In [14]: g.wa.sum()
Out[14]:
Date
01/01/2012    0.791667
01/02/2012    0.722222
Name: wa, dtype: float64

或潜在地:

In [15]: g.wa.transform("sum")
Out[15]:
0    0.791667
1    0.791667
2    0.791667
3    0.722222
4    0.722222
Name: wa, dtype: float64
2020-12-20