我有一个包含以下字段的数据集
01/09/2019 02/08/2019 7
01/09/2019 03/08/2019 1189
01/09/2019 04/08/2019 8
01/09/2019 04/08/2019 1650
01/09/2019 05/08/2019 9
01/09/2019 05/08/2019 1805
01/09/2019 06/08/2019 63
01/09/2019 06/08/2019 2
01/09/2019 07/08/2019 1985
02/09/2019 01/09/2019 886
02/09/2019 01/09/2019 1980
02/09/2019 03/08/2019 3
02/09/2019 03/08/2019 4
02/09/2019 04/08/2019 138
02/09/2019 04/08/2019 8
02/09/2019 05/08/2019 259
03/09/2019 01/09/2019 829
03/09/2019 01/09/2019 509
03/09/2019 02/09/2019 1884
03/09/2019 04/08/2019 6
03/09/2019 04/08/2019 2
03/09/2019 05/08/2019 4
03/09/2019 05/08/2019 161
我想计算日期t_1的列t_A为17500-C_B,依此类推。
编辑 例如:
Date_1 Date_2 C_B t_A
01/09/2019 02/08/2019 7 (17500-7) = 17493
01/09/2019 03/08/2019 1189 (17493-1189) = 16304
01/09/2019 04/08/2019 8 (16304 - 8) = 16296
.
.
.
02/09/2019 01/09/2019 886 (17500 - 886) = 16614
02/09/2019 01/09/2019 1980 (16614 - 1980) = 14634
.
任何人都可以告诉实现相同目标的方法。
谢谢
答案 0 :(得分:2)
使用pandas.Series.cumsum
:
df['t_A'] = 17500 - df['C_B'].cumsum()
print(df)
输出:
I_Code Date_1 Date_2 C_B t_A
0 4 01/09/2019 02/08/2019 7 17493
1 4 01/09/2019 03/08/2019 1189 16304
2 1 01/09/2019 04/08/2019 8 16296
3 4 01/09/2019 04/08/2019 1650 14646
4 1 01/09/2019 05/08/2019 9 14637
5 4 01/09/2019 05/08/2019 1805 12832
6 1 01/09/2019 06/08/2019 63 12769
7 2 01/09/2019 06/08/2019 2 12767
8 4 01/09/2019 07/08/2019 1985 10782
9 1 01/09/2019 08/08/2019 869 9913
10 2 01/09/2019 08/08/2019 6 9907
11 4 01/09/2019 08/08/2019 2072 7835
12 1 01/09/2019 09/08/2019 790 7045
13 4 01/09/2019 09/08/2019 2120 4925
14 1 01/09/2019 10/08/2019 1275 3650
15 1 01/09/2019 11/08/2019 1355 2295
16 4 01/09/2019 11/08/2019 2249 46
答案 1 :(得分:1)
我不明白您为什么说错了,这一行产生了您想要的:
df['t_A'] = 17500-df.groupby('Date_1')["C_B"].cumsum()
请参见以下结果:
Date_1 Date_2 C_B t_A
0 01/09/2019 02/08/2019 7 17493
1 01/09/2019 03/08/2019 1189 16304
2 01/09/2019 04/08/2019 8 16296
3 01/09/2019 04/08/2019 1650 14646
4 01/09/2019 05/08/2019 9 14637
5 01/09/2019 05/08/2019 1805 12832
6 01/09/2019 06/08/2019 63 12769
7 01/09/2019 06/08/2019 2 12767
8 01/09/2019 07/08/2019 1985 10782
9 02/09/2019 01/09/2019 886 16614
10 02/09/2019 01/09/2019 1980 14634
11 02/09/2019 03/08/2019 3 14631
12 02/09/2019 03/08/2019 4 14627
13 02/09/2019 04/08/2019 138 14489
14 02/09/2019 04/08/2019 8 14481
15 02/09/2019 05/08/2019 259 14222
16 03/09/2019 01/09/2019 829 16671
17 03/09/2019 01/09/2019 509 16162
18 03/09/2019 02/09/2019 1884 14278
19 03/09/2019 04/08/2019 6 14272
20 03/09/2019 04/08/2019 2 14270
21 03/09/2019 05/08/2019 4 14266
22 03/09/2019 05/08/2019 161 14105