python - Pandas groupby 累积/滚动总和、平均值和标准差

标签 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 列和 c 列的 std。但是,我希望 sum、average 和 std 是一个滚动/累积数。

例如,对于这个数据集,要找到我想要的 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

谢谢。

最佳答案

您可以通过展开

来做到这一点

第一步是计算每个列的扩展总和、均值和标准差,仅按 '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

关于python - Pandas groupby 累积/滚动总和、平均值和标准差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51751128/

相关文章:

python - 如何使 pylint 报告未使用的返回值

python - Pandas 数据框 - 使用通配符选择行

python - 如何使用 smtp 发送 html 电子邮件内嵌的 plot.ly 图像?

python - 如何在Python中使用numpy.savetxt居中对齐不同长度的列?

Python 师 ://vs math. 楼

python - 如何根据缩进解析 block

python - Matplotlib 使用分层直方图

python - 如何使用数据帧的值作为列并有选择地在其中放入值?

python - numpy 数组和返回上的 str() 方法

python - 多级标签编码器