3

我试图获得相同 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
4

1 回答 1

3

我试图获得相同 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
于 2020-06-30T02:23:22.367 回答