Python Cumsum a列';s每行过去12个月的值

Python Cumsum a列';s每行过去12个月的值,python,pandas,dataframe,Python,Pandas,Dataframe,对于每个ID,我都有一个这样的数据集 月 身份证件 年平均变化 2020-12-01 1. 0 2020-11-01 1. 1. 2020-10-01 1. 0 2020-09-01 1. 0 2020-08-01 1. 0 2020-07-01 1. 0 2020-06-01 1. 0 2020-05-01 1. 0 2020-04-01 1. 0 2020-03-01 1. 1. 2020-02-01 1. 0 2020-01-01 1. 0 2019-12-01 1. 1. 2019-11

对于每个ID,我都有一个这样的数据集

月 身份证件 年平均变化 2020-12-01 1. 0 2020-11-01 1. 1. 2020-10-01 1. 0 2020-09-01 1. 0 2020-08-01 1. 0 2020-07-01 1. 0 2020-06-01 1. 0 2020-05-01 1. 0 2020-04-01 1. 0 2020-03-01 1. 1. 2020-02-01 1. 0 2020-01-01 1. 0 2019-12-01 1. 1. 2019-11-01 1. 0 2019-10-01 1. 0 2019-09-01 1. 0 2019-08-01 1. 0 2019-07-01 1. 0 2019-06-01 1. 0 2019-05-01 1. 0 2019-04-01 1. 0 2019-03-01 1. 0 2019-02-01 1. 1. 试试这个:

df = df.sort_values(['Months'])
df['AnnualSalaryChangeSumFor12Months'] = df['AnnualSalaryChange'].rolling(window=12, min_periods=1).sum()
df = df.sort_values(['Months'], ascending=False)
与groupby非常相似,但有点长:

df = df1.sort_values(['ID', 'Months'])
df['AnnualSalaryChangeSumFor12Months'] = df.reset_index(drop=True).groupby(['ID'])['AnnualSalaryChange'].rolling(window=12, min_periods=1).sum().reset_index(level=0, drop=True)
df = df.sort_values(['ID', 'Months'], ascending=False)

假设此
df

Months ID AnnualSalaryChange
0   2020-12-01   1                   0
1   2020-11-01   1                   1
2   2020-10-01   1                   0
3   2020-09-01   1                   0
4   2020-08-01   1                   0
5   2020-07-01   1                   0
6   2020-06-01   1                   0
7   2020-05-01   1                   0
8   2020-04-01   1                   0
9   2020-03-01   1                   1
10  2020-02-01   1                   0
11  2020-01-01   1                   0
12  2019-12-01   1                   1
13  2019-11-01   1                   0
14  2019-10-01   1                   0
15  2019-09-01   1                   0
16  2019-08-01   1                   0
17  2019-07-01   1                   0
18  2019-06-01   1                   0
19  2019-05-01   1                   0
20  2019-04-01   1                   0
21  2019-03-01   1                   0
22  2019-02-01   1                   1
23  2020-12-01   2                   0
24  2020-11-01   2                   1
25  2020-10-01   2                   0
26  2020-09-01   2                   0
27  2020-08-01   2                   0
28  2020-07-01   2                   0
29  2020-06-01   2                   0
30  2020-05-01   2                   0
31  2020-04-01   2                   0
32  2020-03-01   2                   1
33  2020-02-01   2                   0
34  2020-01-01   2                   0
35  2019-12-01   2                   1
36  2019-11-01   2                   0
37  2019-10-01   2                   0
38  2019-09-01   2                   0
39  2019-08-01   2                   0
40  2019-07-01   2                   0
41  2019-06-01   2                   0
42  2019-05-01   2                   0
43  2019-04-01   2                   0
44  2019-03-01   2                   0
45  2019-02-01   2                   1
你可以做:

df[“月”]=pd.to_datetime(df[“月”])
df=df.sort_值(按=“月”)
df_out=(
df.groupby(“ID”)
.rolling(on=“Months”,window=12,min\u periods=1)[“AnnualSalaryChange”]
.sum()
.reset_index()
.sort_值(按=[“ID”,“Months”],升序=[真,假])
).rename(列={“AnnualSalaryChange”:“annualsalarychangesumfor12个月”})
打印(df_输出)
印刷品:

ID月年平均变化12个月
22   1 2020-12-01                               2.0
21   1 2020-11-01                               3.0
20   1 2020-10-01                               2.0
19   1 2020-09-01                               2.0
18   1 2020-08-01                               2.0
17   1 2020-07-01                               2.0
16   1 2020-06-01                               2.0
15   1 2020-05-01                               2.0
14   1 2020-04-01                               2.0
13   1 2020-03-01                               2.0
12   1 2020-02-01                               1.0
11   1 2020-01-01                               2.0
10   1 2019-12-01                               2.0
9    1 2019-11-01                               1.0
8    1 2019-10-01                               1.0
7    1 2019-09-01                               1.0
6    1 2019-08-01                               1.0
5    1 2019-07-01                               1.0
4    1 2019-06-01                               1.0
3    1 2019-05-01                               1.0
2    1 2019-04-01                               1.0
1    1 2019-03-01                               1.0
0    1 2019-02-01                               1.0
45   2 2020-12-01                               2.0
44   2 2020-11-01                               3.0
43   2 2020-10-01                               2.0
42   2 2020-09-01                               2.0
41   2 2020-08-01                               2.0
40   2 2020-07-01                               2.0
39   2 2020-06-01                               2.0
38   2 2020-05-01                               2.0
37   2 2020-04-01                               2.0
36   2 2020-03-01                               2.0
35   2 2020-02-01                               1.0
34   2 2020-01-01                               2.0
33   2 2019-12-01                               2.0
32   2 2019-11-01                               1.0
31   2 2019-10-01                               1.0
30   2 2019-09-01                               1.0
29   2 2019-08-01                               1.0
28   2 2019-07-01                               1.0
27   2 2019-06-01                               1.0
26   2 2019-05-01                               1.0
25   2 2019-04-01                               1.0
24   2 2019-03-01                               1.0
23   2 2019-02-01                               1.0

为什么行
2020-02-01
12个月的年平均变化量=1
?您好,最后几行缺失。我编辑了它,现在就清楚了。您好,谢谢,它可以工作,但是当我添加
groupby('ID')
时,我得到了这个错误:
TypeError:插入的列的索引与框架索引不兼容
。如何添加groupby?为什么要添加groupby?结果不是已经是你想要的了吗?有很多ID,我应该可以为每个ID做这些。@Deniz更新为包含GroupBy,非常感谢!非常感谢,谢谢!这正是我想要的。我很感激。