首页 > 解决方案 > python 根据上个月的最后一个值计算 pct_change()

问题描述

我正在尝试从上个月的最后一个值计算回报,这是示例数据框,每日值。我不知道如何使用 pct_change() 函数来实现这一点

样本df

date        value     
31/07/2020  141.793,00
03/08/2020  145.401,00 
04/08/2020  124.534,00 
05/08/2020  147.562,00
06/08/2020  131.043,00
07/08/2020  132.556,00
10/08/2020  140.874,00
11/08/2020  128.603,00
01/09/2020  131.451,00
02/09/2020  137.862,00
03/09/2020  130.439,00
04/09/2020  124.608,00
07/09/2020  133.674,00
08/09/2020  126.454,00
09/09/2020  136.488,00

目标

我需要计算每天当前的每月累计回报。当天的返回值应该是上个月最后一个值的返回值。像这样的东西:

date        value        monthly
31/07/2020  141.793,00           NaN
03/08/2020  145.401,00   0,025445544
04/08/2020  124.534,00   -0,12171969
05/08/2020  147.562,00   0,040686071
06/08/2020  131.043,00  -0,075814744
07/08/2020  132.556,00   -0,06514426
10/08/2020  140.874,00  -0,006481279
11/08/2020  128.603,00  -0,093022928
01/09/2020  131.451,00   0,022145673
02/09/2020  137.862,00   0,071996765
03/09/2020  130.439,00   0,014276494
04/09/2020  124.608,00  -0,031064594
07/09/2020  133.674,00   0,039431429
08/09/2020  126.454,00  -0,016710341
09/09/2020  136.488,00   0,061312722

标签: pythondataframe

解决方案


我相信您可以通过以下方式获得所需的东西。

用于str.replace替换,,然后转换为float,然后应用pct_change()并返回一个新列:

df['monthly'] = df['value'].str.replace(',','').astype(float).pct_change()

打印:

                   date       value   monthly
0            31/07/2020  141.793,00       NaN
1   2020-03-08 00:00:00  145.401,00  0.025446
2   2020-04-08 00:00:00  124.534,00 -0.143513
3   2020-05-08 00:00:00  147.562,00  0.184913
4   2020-06-08 00:00:00  131.043,00 -0.111946
5   2020-07-08 00:00:00  132.556,00  0.011546
6   2020-10-08 00:00:00  140.874,00  0.062751
7   2020-11-08 00:00:00  128.603,00 -0.087106
8   2020-01-09 00:00:00  131.451,00  0.022146
9   2020-02-09 00:00:00  137.862,00  0.048771
10  2020-03-09 00:00:00  130.439,00 -0.053844
11  2020-04-09 00:00:00  124.608,00 -0.044703
12  2020-07-09 00:00:00  133.674,00  0.072756
13  2020-08-09 00:00:00  126.454,00 -0.054012
14  2020-09-09 00:00:00  136.488,00  0.079349

推荐阅读