我为每个ID都有一个这样的数据集;
月份 | ID | 年度薪资变动//tr>|
---|---|---|
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 |
22020-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 | 0 | |
2019-05-01 | 1 | 0|
2019-04-01 | 1 | 0|
2019-03-01 | 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["Months"] = pd.to_datetime(df["Months"])
df = df.sort_values(by="Months")
df_out = (
df.groupby("ID")
.rolling(on="Months", window=12, min_periods=1)["AnnualSalaryChange"]
.sum()
.reset_index()
.sort_values(by=["ID", "Months"], ascending=[True, False])
).rename(columns={"AnnualSalaryChange": "AnnualSalaryChangeSumFor12Months"})
print(df_out)
打印:
ID Months AnnualSalaryChangeSumFor12Months
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