我试图计算以下数据框中每个区域的“价格”列的加权平均值,与小时无关。我想本质上是对与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
答案 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