У меня есть функция, которая вычисляет возврат цен на срезе кадра данных return_df
и отдельный l oop, который снова вычисляет стандартные отклонения на нарезанном кадре данных. Я могу запустить оба и вычислить результат прямо сейчас с помощью метода iterrows
. Я пытался применить функцию, чтобы ускорить ее и даже читать о вандеризации pandas / numpy, но вместо этого я получаю nan
значения. Есть ли способ запустить этот код быстрее? Любая помощь приветствуется.
#sigma calculation function
def sigma_calculation(sample_trade):
trade_index = sample_trade.index[0]
sample_return_lst=[]
eurusd_return_lst=[]
for i, row in return_df[trade_index-28:trade_index:1].iterrows():
sample_return_lst.append(return_df.iloc[i,0] * sample_trade.iloc[0,1])
eurusd_return_lst.append(return_df.iloc[i,1] * sample_trade.iloc[0,1])
stats_df = pd.DataFrame(
{'Asset Total Return' : sample_return_lst,
'Reference Total Return' : eurusd_return_lst
})
sigma_trade = stats_df['Asset Total Return'].std()
sigma_eurusd = stats_df['Reference Total Return'].std()
d_lev = sigma_trade/sigma_eurusd
return d_lev
#running the sigma_calculation function for 45 rows from the return_df dataframe and creating a separate df from it
d_lev_lst = []
for i, row in return_df[4433::1].iterrows():
d_lev_lst.append(sigma_calculation(return_df.iloc[[i]]))
d_lev_df = pd.DataFrame({'D-Leverage' : d_lev_lst})
Это то, что я пробовал для второй части (запуск sigma_calculation для 45 строк):
d_lev_df = pd.DataFrame(
{'D-Leverage' : return_df['Asset Return'].iloc[4433::1].apply(lambda row: sigma_calculation(return_df.iloc[[row]])),
})