按累计/累计总和、平均值和标准差分组的 pandas

Pandas groupby cumulative/rolling sum,average, and std(按累计/累计总和、平均值和标准差分组的 pandas )
本文介绍了按累计/累计总和、平均值和标准差分组的 pandas 的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个数据帧(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
我希望groupbymonth-yearname得到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

如何才能找到bc的累计平均值才能得到如下所示的输出?

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

谢谢。

推荐答案

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

这篇关于按累计/累计总和、平均值和标准差分组的 pandas 的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)