熊猫滚动分组按移回 1,试图滞后滚动总和



我正在尝试为同一 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

我正在尝试为同一 ID 获取过去 3 行的滚动总和,但落后 1 行。

您可以通过链接 DataFrame.groupby(ID) 、滞后 1 .shift(1)、窗口 3 .rolling(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

最新更新