Python 带熊猫的时间序列/不同组先前值的累积平均值(不同组的滞后变量)

Python 带熊猫的时间序列/不同组先前值的累积平均值(不同组的滞后变量),python,pandas,dataframe,time-series,Python,Pandas,Dataframe,Time Series,我试图得到使用熊猫的不同gropus之前值的累积平均值 我的原始数据帧(df)是: 我要寻找的结果(不同类型的先前值的累积平均值)如下所示: date type xx yy 0 2018-01-01 A 1.0 NaN 1 2018-01-01 B 5.0 NaN 2 2018-02-01 B 3.0 5.000000 3 2018-03-01 A 2.0 1.000000 4 2018-0

我试图得到使用熊猫的不同gropus之前值的累积平均值

我的原始数据帧(df)是:

我要寻找的结果(不同类型的先前值的累积平均值)如下所示:

         date type   xx        yy
0  2018-01-01    A  1.0       NaN
1  2018-01-01    B  5.0       NaN
2  2018-02-01    B  3.0  5.000000
3  2018-03-01    A  2.0  1.000000
4  2018-03-01    B  7.0  4.000000
5  2018-03-01    C  3.0       NaN
6  2018-04-01    A  1.0  1.500000
7  2018-04-01    B  6.0  5.000000
8  2018-05-01    B  3.0  5.250000
9  2018-06-01    A  5.0  1.333333
10 2018-06-01    B  2.0  4.800000
11 2018-06-01    C  3.0  3.000000
12 2018-07-01    A  1.0  2.250000
13 2018-08-01    B  9.0  4.333333
14 2018-08-01    C  3.0  3.000000
15 2018-09-01    A  2.0  2.000000
16 2018-09-01    B  7.0  5.000000
17 2018-10-01    C  3.0  3.000000
18 2018-10-01    A  6.0  2.000000
19 2018-10-01    B  8.0  5.250000
20 2018-11-01    A  2.0  2.571429
21 2018-12-01    B  7.0  5.555556
22 2018-12-01    C  9.0  3.000000
我尝试了以下Pandas代码但未成功(在执行滚动操作时出错):

请注意,代码的第一部分工作正常:

df['yy'] = (df.groupby('type').xx.transform('cumsum')/(df.groupby('type').xx.cumcount()+1))

**如果你能解决我的错误,或者你能提出另一种优雅的方法来处理熊猫,这将是非常有用的。谢谢

我正在使用
扩展

df.groupby('type')['xx'].expanding(min_periods=2).mean().\
     reset_index(level=0,drop=True).reindex(df.index)
date        type
2018-01-01  A            NaN
            B            NaN
2018-02-01  B       4.000000
2018-03-01  A       1.500000
            B       5.000000
            C            NaN
2018-04-01  A       1.333333
            B       5.250000
2018-05-01  B       4.800000
2018-06-01  A       2.250000
            B       4.333333
            C       3.000000
2018-07-01  A       2.000000
2018-08-01  B       5.000000
            C       3.000000
2018-09-01  A       2.000000
            B       5.250000
2018-10-01  C       3.000000
            A       2.571429
            B       5.555556
2018-11-01  A       2.500000
2018-12-01  B       5.700000
            C       4.200000
Name: xx, dtype: float64
我使用shift()找到了两种解决方案: 和(使用滚动):

任何其他方式都欢迎

#######不是我所问的###我提到了以前/过去的期间(不包括当前期间##
df['yy'] = (df.groupby('type').xx.transform('cumsum')/(df.groupby('type').xx.cumcount()+1))
df.groupby('type')['xx'].expanding(min_periods=2).mean().\
     reset_index(level=0,drop=True).reindex(df.index)
date        type
2018-01-01  A            NaN
            B            NaN
2018-02-01  B       4.000000
2018-03-01  A       1.500000
            B       5.000000
            C            NaN
2018-04-01  A       1.333333
            B       5.250000
2018-05-01  B       4.800000
2018-06-01  A       2.250000
            B       4.333333
            C       3.000000
2018-07-01  A       2.000000
2018-08-01  B       5.000000
            C       3.000000
2018-09-01  A       2.000000
            B       5.250000
2018-10-01  C       3.000000
            A       2.571429
            B       5.555556
2018-11-01  A       2.500000
2018-12-01  B       5.700000
            C       4.200000
Name: xx, dtype: float64
df['yy'] = (df.assign(H=(df.groupby('type').xx.transform('cumsum')/(df.groupby('type').xx.cumcount()+1)))).groupby('type').H.shift()
df['yy'] = (df.assign(H=(df.groupby('type').xx.transform('cumsum')/(df.groupby('type').xx.cumcount()+1)))).groupby('type').H.rolling(2).apply(lambda x: x[-2]).reset_index(level=0,drop=True).reindex(df.index)