【问题标题】:How to compute prices form daily returns?如何根据每日收益计算价格?
【发布时间】:2020-11-10 22:17:25
【问题描述】:

我有一个包含每日回报的数据框。我想添加另一列,其中包含基于每日回报计算的价格系列。 这是数据框:

         date   daily
0  2020-09-01  0.0000
1  2020-09-02  0.0012
2  2020-09-03 -0.0005
3  2020-09-04 -0.0004
4  2020-09-07  0.0032
5  2020-09-08 -0.0015
6  2020-09-09  0.0005
7  2020-09-10  0.0003
8  2020-09-11  0.0001
9  2020-09-14  0.0043
10 2020-09-15  0.0037
11 2020-09-16 -0.0008

这是我要添加的价格列:

       prices
0   100.000000
1   100.120000
2   100.069940
3   100.029912
4   100.350008
5   100.199483
6   100.249582
7   100.279657
8   100.289685
9   100.720931
10  101.093598
11  101.012724

我尝试在“每日”列上循环,然后计算价格,但我没有将新值保存到列表 prz 中。

prz= []

for row in df['daily']:
        prz.append(100 *(1+row))

【问题讨论】:

    标签: python-3.x pandas dataframe


    【解决方案1】:

    首先添加1,然后使用Series.cumprod,最后乘以100,用于反转使用Series.pct_change,首先将NaN替换为0

    df['prices'] = df['daily'].add(1).cumprod().mul(100)
    
    df['back'] = df['prices'].pct_change().fillna(0)
    print (df)
              date   daily      prices    back
    0   2020-09-01  0.0000  100.000000  0.0000
    1   2020-09-02  0.0012  100.120000  0.0012
    2   2020-09-03 -0.0005  100.069940 -0.0005
    3   2020-09-04 -0.0004  100.029912 -0.0004
    4   2020-09-07  0.0032  100.350008  0.0032
    5   2020-09-08 -0.0015  100.199483 -0.0015
    6   2020-09-09  0.0005  100.249582  0.0005
    7   2020-09-10  0.0003  100.279657  0.0003
    8   2020-09-11  0.0001  100.289685  0.0001
    9   2020-09-14  0.0043  100.720931  0.0043
    10  2020-09-15  0.0037  101.093598  0.0037
    11  2020-09-16 -0.0008  101.012724 -0.0008
    

    【讨论】:

      【解决方案2】:

      您也可以在这里使用numpy.cumproduct()

      In [1349]: import numpy as np
      
      In [1350]: df['prices'] = np.cumproduct(df.daily + 1) * 100
      
      In [1351]: df
      Out[1351]: 
                date   daily      prices
      0   2020-09-01  0.0000  100.000000
      1   2020-09-02  0.0012  100.120000
      2   2020-09-03 -0.0005  100.069940
      3   2020-09-04 -0.0004  100.029912
      4   2020-09-07  0.0032  100.350008
      5   2020-09-08 -0.0015  100.199483
      6   2020-09-09  0.0005  100.249582
      7   2020-09-10  0.0003  100.279657
      8   2020-09-11  0.0001  100.289685
      9   2020-09-14  0.0043  100.720931
      10  2020-09-15  0.0037  101.093598
      11  2020-09-16 -0.0008  101.012724
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        • 1970-01-01
        • 2021-02-08
        • 2013-11-28
        • 2019-10-13
        • 1970-01-01
        相关资源
        最近更新 更多