Pandas Rolling Groupby向后移1,尝试使滚动总和滞后

时间:2019-01-24 20:09:01

标签: python pandas pandas-groupby rolling-sum

我正在尝试获取相同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

1 个答案:

答案 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