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]])),
    })