基于2个变量约束计算大熊猫数据框中的滚动总和

时间:2018-08-02 11:22:59

标签: python-3.x pandas

我想创建一个变量: SumOfPrevious5OccurencesAtIDLevel ,它是 Var1 的前5个值(根据Date变量)的总和ID级别(第1列),否则将取值为NA

样本数据和输出:

ID  Date      Var1  SumOfPrevious5OccurencesAtIDLevel
1   1/1/2018    0   NA
1   1/2/2018    1   NA
1   1/3/2018    2   NA
1   1/4/2018    3   NA
2   1/1/2018    4   NA
2   1/2/2018    5   NA
2   1/3/2018    6   NA
2   1/4/2018    7   NA
2   1/5/2018    8   NA
2   1/6/2018    9   30
2   1/7/2018    10  35
2   1/8/2018    11  40

1 个答案:

答案 0 :(得分:1)

groupbytransform和功能rollingshift一起使用:

df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%Y')
#if not sorted ID with datetimes
df = df.sort_values(['ID','Date'])

df['new'] = df.groupby('ID')['Var1'].transform(lambda x: x.rolling(5).sum().shift())
print (df)
    ID       Date  Var1  SumOfPrevious5OccurencesAtIDLevel   new
0    1 2018-01-01     0                                NaN   NaN
1    1 2018-01-02     1                                NaN   NaN
2    1 2018-01-03     2                                NaN   NaN
3    1 2018-01-04     3                                NaN   NaN
4    2 2018-01-01     4                                NaN   NaN
5    2 2018-01-02     5                                NaN   NaN
6    2 2018-01-03     6                                NaN   NaN
7    2 2018-01-04     7                                NaN   NaN
8    2 2018-01-05     8                                NaN   NaN
9    2 2018-01-06     9                               30.0  30.0
10   2 2018-01-07    10                               35.0  35.0
11   2 2018-01-08    11                               40.0  40.0