Я пытаюсь рассчитать 10-летний форвардный доход от исторических данных о запасах.У меня есть фрейм данных:
import blpapi
options = blpapi.SessionOptions()
options.setServerHost('localhost')
options.setServerPort(8194)
session = blpapi.Session(options)
session.start()
from tia.bbg import LocalTerminal
import tia.bbg.datamgr as dm
# data manager
mgr = dm.BbgDataManager()
# Bloomberg variables
px = 'PX_LAST'
# start and end date
start_dt = '1952-01-01'
end_dt = date.today()
# tickers
mve_tick = 'NCBEILQ027S' # Fred
gdp_tick = 'GDP' # Fred
sp_tick = mgr['SPX INDEX'] # Bloomberg
# get data
mve = fred.get_series(mve_tick, observation_start = start_dt,
observation_end = end_dt)
gdp = fred.get_series(gdp_tick, observation_start = start_dt,
observation_end = end_dt)
sp = sp_tick.get_historical(px, start_dt, end_dt)
# create data frames
mve_df = pd.DataFrame(mve)
mve_df.index.name = 'Date'
mve_df.columns = ['MVE']
gdp_df = pd.DataFrame(gdp) * 1000
gdp_df.index.name = 'Date'
gdp_df.columns = ['GDP']
gdp_col = gdp_df['GDP']
sp_df = pd.DataFrame(sp)
sp_df.index.name = 'Date'
sp_df.columns = ['Price']
# convert S&P to quarterly return
sp_df = sp_df.resample('3MS').first()
sp_df_col = sp_df['Price']
# merge data frames
df = mve_df.join([gdp_col, sp_df_col])
df.reset_index(inplace = True)
df['Q Return'] = df['Price'].pct_change()
Я хочу добавить новый столбец на основе прогона вычисления для столбца 'Q Return'.
Я хочу умножить значения первых 40Точки данных в столбце «Q Return», а затем поднимите этот sumproduct до (4/40) и получите это первое значение в моем новом добавленном столбце.Тогда следующим значением будет субпродукт строк 1-41 столбца 'Q return', а затем возведем его в тот же показатель степени и т. Д.
Я написал эту функцию для выполнения вычисления:
def fwdreturn(returns, t):
outp = 1
for i in range(t, t + 40):
outp = outp * i
return outp'
df['10 Year Fwd Return'] = [fwdreturn(df['Q Return'], t) for t in df['Q Return']] # this is where error is occuring
print(df)
Ошибка, которую я получаю, состоит в том, что объект 'float' не может быть интерпретирован как целое число.
Есть ли лучший способ приблизиться к этому?