gpt4 book ai didi

python - Cumsum 每行 pandas 过去 12 个月的列值

转载 作者:行者123 更新时间:2023-12-04 01:03:07 26 4
gpt4 key购买 nike

我的每个 ID 都有一个这样的数据集;

<表类="s-表"><头><日>月 身份证年薪变动<正文>2020-12-01102020-11-01112020-10-01102020-09-01102020-08-01102020-07-01102020-06-01102020-05-01102020-04-01102020-03-01112020-02-01102020-01-01102019-12-01112019-11-01102019-10-01102019-09-01102019-08-01102019-07-01102019-06-01102019-05-01102019-04-01102019-03-01102019-02-0111

我想要一个像 AnnualSalaryChangeSumFor12Months 这样的列。它应该是每行过去 12 个月(可变)的 AnnualSalaryChange 值的累计总和。对于每一行,它应该返回 12 个月前并对当时的值求和。如果没有 12 行要求和,它可以对剩余的行求和。

<表类="s-表"><头><日>月 身份证年薪变动AnnualSalaryChangeSumFor12Months<正文>2020-12-011022020-11-011132020-10-011022020-09-011022020-08-011022020-07-011022020-06-011022020-05-011022020-04-011022020-03-011122020-02-011012020-01-011022019-12-011122019-11-011012019-10-011012019-09-011012019-08-011012019-07-011012019-06-011012019-05-011012019-04-011012019-03-011012019-02-01111

我试过了;

df['ChangeSum']=df.groupby(['ID','Year'])['AnnualSalaryChange'].cumsum()

但它并没有给出我真正想要的。我怎样才能做到这一点?谢谢。

最佳答案

假设这个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

关于python - Cumsum 每行 pandas 过去 12 个月的列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67494673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com