【问题标题】:Using np.average in groupby or any aggregate function with parameters在 groupby 或任何带参数的聚合函数中使用 np.average
【发布时间】:2015-07-28 05:10:00
【问题描述】:

我现在遇到了在 pandas 中计算组加权平均值的问题。

假设数据框有 3 列“Group”、“A”和“W”。如果我想找到 A 的组均值,我会这样做

df.groupby(['Group'])['A'].mean()

或者如果我需要整体加权平均,我可以这样做

np.average(df.A,weight=df.W)

但是我可以计算每个组的加权平均值吗?

谢谢!

【问题讨论】:

    标签: python numpy pandas


    【解决方案1】:

    您可以将 groupby/apply 与自定义 (lambda) 函数一起使用:

    import numpy as np
    import pandas as pd
    
    np.random.seed(2015)
    N = 10000
    df = pd.DataFrame(np.random.randint(10, size=(N,3)), columns=['Group', 'A', 'W'])
    result =  df.groupby(['Group']).apply(lambda x: np.average(x['A'], weights=x['W']))
    print(result)
    

    产量

    Group
    0    4.422978
    1    4.557099
    2    4.517336
    3    4.535559
    4    4.526898
    5    4.697104
    6    4.580512
    7    4.598492
    8    4.388965
    9    4.424191
    dtype: float64
    

    【讨论】:

    • 非常感谢!如果我想使用 pandas 的重采样功能(本质上是 groupby 切片),我也可以这样做吗?
    • 这取决于。调用 df.resample 需要 df 有 DatetimeIndex、PeriodIndex 或 TimedeltaIndex。
    • 有没有办法使用.agg() 来做到这一点,所以它也适用于多列?
    猜你喜欢
    • 2019-01-22
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多