【问题标题】:Pandas: Aggregation with WeightsPandas:权重聚合
【发布时间】:2015-02-02 03:01:10
【问题描述】:

目前,我正在使用类似于

的方式计算我的时刻
moments = df_sum.groupby(level=[0,1])['myCol'].agg([np.min, np.median, np.mean, np.max, np.std, len])

但是,现在我有一个额外的列weights,其中包含相应的权重。也就是说,如果一列的权重是2,则在计算平均值、标准差等时,观察结果应该计算两次。我想使用weights 列重复我的计算。一种蛮力的方法是使用weights 重复我的观察,但是:

  • 这将非常缓慢且效率低下
  • 权重不一定是整数

许多统计函数都包含一个附加计算权重的参数,例如np.average

weights : array_like, optional 与 a中的值。 a 中的每个值对平均值的贡献是 其相关的重量。权重数组可以是一维的(其中 如果它的长度必须是沿给定轴的 a 的大小)或 与a相同的形状。如果 weights=None,则假设 a 中的所有数据为 权重等于 1。

鉴于我想包含诸如np.average 之类的函数,我将如何从上面改写我的命令?是否有其他聚合函数的命令,例如median?简单来说,minmax 不应该改变,计算 len() 也不应该太难。

【问题讨论】:

    标签: python numpy pandas


    【解决方案1】:

    你能在 groupby 之前做这个吗?

    df_sum['weighted_col'] = df_sum['weights'] * df_sum['my_col']
    df.groupby(level=[0, 1].agg([...])[<columns to keep>]
    

    另外,专业提示:使用 groupby 计算的所有内容,这样做会更容易:

    df.groupby(level=[0, 1].apply(lambda g: g.describe().T)

    【讨论】:

    • 你可以直接在 groupby btw 上使用 .describe()
    • 如果我没记错的话,直接影响值适用于mean,,但不适用于std
    • @FooBar -- 加权标准差可能有点复杂stats.stackexchange.com/questions/6534/…
    猜你喜欢
    • 2020-03-07
    • 2021-12-05
    • 1970-01-01
    • 2019-01-23
    • 2019-09-18
    • 2020-12-13
    • 2019-12-17
    • 2016-06-24
    • 2022-01-24
    相关资源
    最近更新 更多