Calculate Daily Returns with Pandas DataFrame

前端 未结 3 1714
不思量自难忘°
不思量自难忘° 2021-01-31 18:41

Here is my Pandas data frame:

prices = pandas.DataFrame([1035.23, 1032.47, 1011.78, 1010.59, 1016.03, 1007.95, 
              1022.75, 1021.52, 1026.11, 1027.04,         


        
3条回答
  •  遥遥无期
    2021-01-31 19:13

    Why not use the very convenient pct_change method provided by pandas by default:

    import pandas as pd
    
    prices = pandas.DataFrame([1035.23, 1032.47, 1011.78, 1010.59, 1016.03, 1007.95, 
              1022.75, 1021.52, 1026.11, 1027.04, 1030.58, 1030.42,
              1036.24, 1015.00, 1015.20])
    
    daily_return = prices.pct_change(1) # 1 for ONE DAY lookback
    monthly_return = prices.pct_change(21) # 21 for ONE MONTH lookback
    annual_return = prices.pct_change(252) # 252 for ONE YEAR lookback
    

    Original prices:

    print(prices)
              0                                                                    
    0   1035.23                                                                    
    1   1032.47                                                                    
    2   1011.78                                                                    
    3   1010.59                                                                    
    4   1016.03                                                                    
    5   1007.95                                                                    
    6   1022.75                                                                    
    7   1021.52                                                                    
    8   1026.11                                                                    
    9   1027.04                                                                    
    10  1030.58                                                                    
    11  1030.42                                                                    
    12  1036.24                                                                    
    13  1015.00                                                                    
    14  1015.20                                                                    
    

    Daily Return as prices.pct_change(1):

    print(prices.pct_change(1))
               0                                                                   
    0        NaN                                                                   
    1  -0.002666                                                                   
    2  -0.020039                                                                   
    3  -0.001176                                                                   
    4   0.005383                                                                   
    5  -0.007953                                                                   
    6   0.014683                                                                   
    7  -0.001203                                                                   
    8   0.004493                                                                   
    9   0.000906                                                                   
    10  0.003447                                                                   
    11 -0.000155                                                                   
    12  0.005648                                                                   
    13 -0.020497                                                                   
    14  0.000197 
    

提交回复
热议问题