Python 带熊猫的时间序列/不同组先前值的累积平均值(不同组的滞后变量)
我试图得到使用熊猫的不同gropus之前值的累积平均值 我的原始数据帧(df)是: 我要寻找的结果(不同类型的先前值的累积平均值)如下所示: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
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)