熊猫groupby累积/总和,平均值和标准差

时间:2018-08-08 16:03:45

标签: python pandas numpy pandas-groupby cumulative-sum

我有一个数据框(df),如下所示:

month-year    name    a    b    c
2018-01       X       2    1    4
2018-01       Y       1    0    5
2018-01       X       1    6    3
2018-01       Y       4    10   7
2018-02       X       13   4    2
2018-02       Y       22   13   9
2018-02       X       3    7    4
2018-02       Y       2    15   0

我要groupby month-yearname来获取第a列,第b列的平均值和第{{1列的std }}。但是,我希望求和,平均值和std为滚动/累积数。

例如,对于此数据集,要找到我想要的输出,我可以做类似的事情

c

得到类似的东西

df.groupby(['month_year','name']).agg(sum).groupby(level=[1]).agg({'a':np.cumsum})

我该怎么做才能找到month-year name a 2018-01 X 3 Y 5 2018-02 X 19 Y 29 b的std的累积平均值,以得到如下所示的输出?

c

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用expanding

第一步是计算每列的扩展总和,均值和标准差,仅按'name'分组,然后将其与原始DataFrame结合起来。

然后您要分组,并选择每个['month-year', 'name']组中的最后一行。

df = df.join(df.groupby(['name']).expanding().agg({'a': sum, 'b': 'mean', 'c': 'std'})
               .reset_index(level=0, drop=True)
               .add_suffix('_roll'))

df.groupby(['month-year', 'name']).last().drop(columns=['a', 'b', 'c'])

输出:

                 a_roll  b_roll    c_roll
month-year name                          
2018-01    X        3.0     3.5  0.707107
           Y        5.0     5.0  1.414214
2018-02    X       19.0     4.5  0.957427
           Y       29.0     9.5  3.862210