Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calculate Daily Returns with Pandas DataFrame

Tags:

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, 1030.58, 1030.42,               1036.24, 1015.00, 1015.20]) 

Here is my daily_return function:

def daily_return(prices):     return prices[:-1] / prices[1:] - 1 

Here is output that comes from this function:

0    NaN 1      0 2      0 3      0 4      0 5      0 6      0 7      0 8      0 9      0 10     0 11     0 12     0 13     0 14   NaN 

Why am I having this output?

like image 240
Michael Avatar asked Nov 15 '13 12:11

Michael


1 Answers

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  
like image 84
YaOzI Avatar answered Sep 19 '22 17:09

YaOzI