熊猫:权重聚合

时间:2015-02-01 18:47:28

标签: python numpy pandas

现在,我正在使用

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

但是,现在我有一个包含相应权重的附加列weights。也就是说,如果列的权重是2,则在计算mean,std等时,观察应该计数两次。我想使用weights列重复我的计算。蛮力的方式是使用weights重复我的观察,但是:

  • 这将是非常缓慢和低效的
  • 权重不一定是整数

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

  

weights:array_like,optional一个权重数组   a中的值。 a中的每个值都有助于平均值   它的相关重量。权重数组可以是1-D(其中   case的长度必须是沿给定轴的a的大小)或者   与a相同的形状。如果权重=无,则假定a中的所有数据   重量等于一。

鉴于我想包含诸如np.average之类的功能,我将如何从上面重新命名我的命令?还有其他聚合函数的命令,例如median吗?琐碎的是,minmax不应该改变,计算len()也不应该太难。

1 个答案:

答案 0 :(得分:0)

你能在群发之前做到这一点吗?

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)