计算条件特殊的熊猫的加权平均值

时间:2019-01-23 20:09:30

标签: python pandas dataframe weighted-average

我试图计算以下数据框中每个区域的“价格”列的加权平均值,与小时无关。我想本质上是对与A匹配的数量求和,将每个单独的数量行除以该数量(以获得权重),然后将其乘以价格。

大约有200个区域,我很难编写一些可以检测到区域匹配的东西,而不必写df['ZONE'] = 'A'等。请帮助我迷失的自我=)

HOUR:   1,2,3,1,2,3,1,2,3

ZONE:   A,A,A,B,B,B,C,C,C

PRICE:  12,15,16,17,12,11,12,13,15

QUANTITY: 5,6,1 5,7,9 6,3,2

我不确定您是否可以通用地编写某些内容,但是我想如果我编写了一个函数,其中x是我的“区域”,创建带有可能区域的列表,然后创建一个for循环该怎么办。这是我编写的功能,实际上并不起作用-试图弄清楚我还能如何使它起作用

def wavgp(x):
    df.loc[df['ZONE'].isin([str(x)])] = x

1 个答案:

答案 0 :(得分:1)

以下是使用groupby操作的可能解决方案:

weighted_price = df.groupby('ZONE').apply(lambda x: (x['PRICE'] * x['QUANTITY']).sum()/x['QUANTITY'].sum())

说明

首先,我们对zone进行分组,对于每个区块(同一区域),我们将价格乘以数量并将这些值求和。我们将此结果除以数量的总和即可得到您想要的结果。

ZONE
A    13.833333
B    12.761905
C    12.818182
dtype: float64