Python 对于以下代码,如何使用比ItErrors更快的循环?
我有一个函数,用于计算Python 对于以下代码,如何使用比ItErrors更快的循环?,python,pandas,loops,apply,Python,Pandas,Loops,Apply,我有一个函数,用于计算return\u df数据帧切片上的价格回报,还有一个单独的循环,用于再次计算切片数据帧上的标准偏差。我现在可以使用iterrows方法运行这两个程序并计算结果。我曾尝试应用该函数来加快速度,甚至阅读了关于pandas/numpy矢量化的文章,但我得到了nan值。有没有办法更快地运行此代码?感谢您的帮助 #sigma calculation function def sigma_calculation(sample_trade): trade_index = sa
return\u df
数据帧切片上的价格回报,还有一个单独的循环,用于再次计算切片数据帧上的标准偏差。我现在可以使用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})
这是我在第二部分中尝试的(在45行上运行sigma_计算):
默认情况下,在应用函数中,轴=0(即列)。尝试指定轴=1以跨行应用。@DarrylG谢谢,第一次尝试了。我得到一个“TypeError:()得到一个意外的关键字参数'axis'”错误message@edgemencandir--该错误表明您将axis参数放置在错误的位置,导致它将其错误地作为lambda函数定义的一部分,而该参数应为apply。但是,我不确定这是否会起作用,因为sigma_计算过程会在内部跨多行进行,我不确定应用是否可能。默认情况下,在应用函数中,轴=0(即列)。尝试指定轴=1以跨行应用。@DarrylG谢谢,第一次尝试了。我得到一个“TypeError:()得到一个意外的关键字参数'axis'”错误message@edgemencandir--该错误表明您将axis参数放置在错误的位置,导致它将其错误地作为lambda函数定义的一部分,而该参数应为apply。然而,我不确定这是否会起作用,因为sigma_计算过程在内部跨越了几行,我不确定这是否适用于apply。
d_lev_df = pd.DataFrame(
{'D-Leverage' : return_df['Asset Return'].iloc[4433::1].apply(lambda row: sigma_calculation(return_df.iloc[[row]])),
})