Groupby和滚动平均值

时间:2020-03-28 17:06:38

标签: python python-3.x pandas

我有一个DataFrame的示例,如下所示:

 Group    Col_A     Col_B     Col_C
   A        1         1         10
   B        5         7          9
   C        3         5          3
   A        2         2          2
   B        1         5          9
   C        7         7          7
   A       50        100        100

我想按“分组”列进行分组,计算最后2次出现并找到平均值,然后将其他列替换为其各自的值。

我知道,如果我只这样做:

 df.groupby('Group').mean()

我将获得一个数据框,其中“组”为索引,其他列为列,它们的值是平均值,而不是最后2次出现的平均值。另外,替换有点儿麻烦。

我想得到:

 Group    Col_A     Col_B     Col_C
   A        1         1         10
   B        5         7          9
   C        3         5          3
   A       1.5       1.5         6
   B        3         6          9
   C        5         6         10
   A       26        51         51

显然,它需要高级的groupby和调整性能。 谢谢您的帮助!

这是可以加载的数据的示例:

import pandas as pd
from io import StringIO

s = '''\
Group,Col_A,Col_B,Col_C
A,1,1,10
B,5,7,9
C,3,5,3
A,2,2,2
B,1,5,9
C,7,7,7
A,50,100,100
'''
df = pd.read_csv(StringIO(s))

1 个答案:

答案 0 :(得分:3)

您可以在分组后使用滚动。所以在这里,我将使用:

df.groupby('Group').rolling(2, min_periods=1).mean().reset_index(level=0).sort_index()

它给出了预期的结果:

  Group  Col_A  Col_B  Col_C
0     A    1.0    1.0   10.0
1     B    5.0    7.0    9.0
2     C    3.0    5.0    3.0
3     A    1.5    1.5    6.0
4     B    3.0    6.0    9.0
5     C    5.0    6.0    5.0
6     A   26.0   51.0   51.0