使用 pandas /数据框计算加权平均值 [英] Calculate weighted average using a pandas/dataframe

查看:105
本文介绍了使用 pandas /数据框计算加权平均值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有下表.我想根据以下公式计算按每个日期分组的加权平均值.我可以使用一些标准的常规代码来做到这一点,但是假设此数据在pandas数据框中,有没有比迭代更容易的方法了?

I have the following table. I want to calculate a weighted average grouped by each date based on the formula below. I can do this using some standard conventional code, but assuming that this data is in a pandas dataframe, is there any easier way to achieve this rather than through iteration?

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))

01/01/2012 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/sum(100,80))+ 1.0 *(80/ sum(100,80))

01/02/2012 w_avg = 0.5 * ( 100/ sum(100,80)) + 1.0 * ( 80/ sum(100,80))

推荐答案

我想我可以通过两个groupbys来做到这一点.

I think I would do this with two groupbys.

首先计算加权平均值":

First to calculate the "weighted average":

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

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

If you set this as a column, you can groupby over it:

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

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

Now the sum of this column is the desired:

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

这篇关于使用 pandas /数据框计算加权平均值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆