使用上一行计算当前行的总和
Using previous row to calculate sum of current row
我有一个 python 问题,我似乎无法弄清楚。以下数据框说明了在给定年份和月份中花钱的人:
ID
Year
Month
Amount
134
2020
11
-199
134
2020
12
-50
134
2021
1
40
135
2020
11
-365
135
2020
12
-23
135
2021
1
400
但是,我想添加一个新列来汇总每个月的这些费用。
示例:某人在第 1 个月花费 50 欧元,在第 2 个月花费 100 欧元。这将在第 2 个月总共花费 150 欧元。我想在新专栏中说明这种支出行为,并假设每个人都有 100 欧元作为启动资金。 (这就是为什么在下面的示例中,一个人花费了 200,但新列显示 -100。
这是我想要的专栏:
ID
Year
Month
Amount
NewColumn
134
2020
11
-200
-100
134
2020
12
-50
-150
134
2021
1
40
-110
135
2020
11
-365
-265
135
2020
12
-23
-288
135
2021
1
400
112
这是重新创建第一个数据帧的代码:
data = {'ID': ['134', '134','134','135','135','135',], 'Year': [2020, 2020, 2021, 2020, 2020, 2021,], 'Month': [11, 12, 1, 11, 12, 1], 'Amount': [-199, -50, 40, -365, -23, 400]}
df = pd.DataFrame(data)
我已经尝试了 cumsum() 和 .rolling 但无法弄清楚。
希望我已经提供了足够的信息,否则我会很乐意提供更多信息
提前致谢
您可以使用 cumsum() + 100
:
df["NewColumn"] = df.groupby(["ID"])["Amount"].cumsum()+100
输出:
ID Year Month Amount NewColumn
0 134 2020 11 -199 -99
1 134 2020 12 -50 -149
2 134 2021 1 40 -109
3 135 2020 11 -365 -265
4 135 2020 12 -23 -288
5 135 2021 1 400 112
PS:当您从 -200
开始时,您的预期输出略有不同,但在数据中它是 -199
:-)
我有一个 python 问题,我似乎无法弄清楚。以下数据框说明了在给定年份和月份中花钱的人:
ID | Year | Month | Amount |
---|---|---|---|
134 | 2020 | 11 | -199 |
134 | 2020 | 12 | -50 |
134 | 2021 | 1 | 40 |
135 | 2020 | 11 | -365 |
135 | 2020 | 12 | -23 |
135 | 2021 | 1 | 400 |
但是,我想添加一个新列来汇总每个月的这些费用。
示例:某人在第 1 个月花费 50 欧元,在第 2 个月花费 100 欧元。这将在第 2 个月总共花费 150 欧元。我想在新专栏中说明这种支出行为,并假设每个人都有 100 欧元作为启动资金。 (这就是为什么在下面的示例中,一个人花费了 200,但新列显示 -100。
这是我想要的专栏:
ID | Year | Month | Amount | NewColumn |
---|---|---|---|---|
134 | 2020 | 11 | -200 | -100 |
134 | 2020 | 12 | -50 | -150 |
134 | 2021 | 1 | 40 | -110 |
135 | 2020 | 11 | -365 | -265 |
135 | 2020 | 12 | -23 | -288 |
135 | 2021 | 1 | 400 | 112 |
这是重新创建第一个数据帧的代码:
data = {'ID': ['134', '134','134','135','135','135',], 'Year': [2020, 2020, 2021, 2020, 2020, 2021,], 'Month': [11, 12, 1, 11, 12, 1], 'Amount': [-199, -50, 40, -365, -23, 400]}
df = pd.DataFrame(data)
我已经尝试了 cumsum() 和 .rolling 但无法弄清楚。 希望我已经提供了足够的信息,否则我会很乐意提供更多信息
提前致谢
您可以使用 cumsum() + 100
:
df["NewColumn"] = df.groupby(["ID"])["Amount"].cumsum()+100
输出:
ID Year Month Amount NewColumn
0 134 2020 11 -199 -99
1 134 2020 12 -50 -149
2 134 2021 1 40 -109
3 135 2020 11 -365 -265
4 135 2020 12 -23 -288
5 135 2021 1 400 112
PS:当您从 -200
开始时,您的预期输出略有不同,但在数据中它是 -199
:-)