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?
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With