Python 计算具有唯一条件的熊猫的加权平均数

Python 计算具有唯一条件的熊猫的加权平均数,python,pandas,dataframe,weighted-average,Python,Pandas,Dataframe,Weighted Average,我试图计算以下数据框中每个区域的prices列的加权平均值,而不考虑小时数。我想把与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

我试图计算以下数据框中每个区域的prices列的加权平均值,而不考虑小时数。我想把与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

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

weighted_price = df.groupby('ZONE').apply(lambda x: (x['PRICE'] * x['QUANTITY']).sum()/x['QUANTITY'].sum())
解释 首先,我们按区域分组,对于同一区域的每个区块,我们将价格乘以数量,并将这些值相加。我们将这个结果除以数量之和,得到您想要的结果

ZONE
A    13.833333
B    12.761905
C    12.818182
dtype: float64