Pandas按组累积/滚动求和、平均值和标准差

3
我有一个数据框(`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

我想按月份-年份和名称进行分组,以获取列a的总和,列b的平均值和列c的标准差。但是,我希望总和,平均值和标准差是一个滚动/累积数字。
例如,对于此数据集,要找到所需的a输出,可以执行以下操作:
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的累积平均值和 c 的标准差,以获得以下输出?
month-year    name    a    b    c
2018-01       X       3    3.5  0.71
              Y       5    5    1.41
2018-02       X       19   4.5  0.96
              Y       29   9.5  3.86

谢谢你。
1个回答

1
你可以使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接