【问题标题】:Calculate weighted average in pandas with unique condition计算具有独特条件的熊猫的加权平均值
【发布时间】:2019-01-23 20:09:29
【问题描述】:

我正在尝试计算以下数据框中每个区域的“价格”列的加权平均值,而不考虑小时数。我想基本上将匹配 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

【问题讨论】:

    标签: python pandas dataframe weighted-average


    【解决方案1】:

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

    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
    
    

    【讨论】:

      猜你喜欢
      • 2015-01-12
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多