我正在尝试获取相同ID的过去3行的总和,但滞后1行。我的尝试看起来像下面的代码,我是专栏文章。必须有一种方法可以执行此操作,但是这种方法似乎行不通。
for i in df.columns.values:
df.groupby('Id', group_keys=False)[i].rolling(window=3, min_periods=2).mean().shift(1)
id dollars lag
1 6 nan
1 7 nan
1 6 6.5
3 7 nan
3 4 nan
3 4 5.5
3 3 5
5 6 nan
5 5 nan
5 6 5.5
5 12 5.67
5 7 8.3
答案 0 :(得分:0)
我正在尝试获得相同ID的过去3行的总和,但落后1行。
您可以通过链接DataFrame.groupby(ID)
,.shift(1)
代表滞后1,.rolling(3)
代表窗口3和.sum()
来创建滞后滚动总和。
示例:假设您的数据集是:
import pandas as pd
# Reproducible datasets are your friend!
d = pd.DataFrame({'grp':pd.Series(['A']*4 + ['B']*5 + ['C']*6),
'x':pd.Series(range(15))})
print(d)
grp x
A 0
A 1
A 2
A 3
B 4
B 5
B 6
B 7
B 8
C 9
C 10
C 11
C 12
C 13
C 14
我想你要的是这个
d['y'] = d.groupby('grp')['x'].shift(1).rolling(3).sum()
print(d)
grp x y
A 0 NaN
A 1 NaN
A 2 NaN
A 3 3.0
B 4 NaN
B 5 NaN
B 6 NaN
B 7 15.0
B 8 18.0
C 9 NaN
C 10 NaN
C 11 NaN
C 12 30.0
C 13 33.0
C 14 36.0