优化在数据帧中滚动的速度和性能

问题描述

我有3个相同代码的变体,并且想知道它们是否对速度或内存有正面或负面影响。我为它们计时,发现最后一个最好,因为滚动的持续时间保持不变,因为滚动操作限于数据帧的最后几行。 self._bars数据帧随着时间而增长。基本上,每次将新记录添加self._bars时,我都会为该记录计算3个数字并将它们写在同一行上。

我可以对Code#3进行进一步的改进吗?

CODE#1:
    self._bars['ret'] = (np.log(self._bars.close)
                          - self._bars.close.rolling(f'{self._rollingSec}s').apply(lambda x: np.log(x[0])))
    self._bars['meanret'] = self._bars.ret.rolling(f'{self._rollingSecExt}s').mean().ffill()
    self._bars['sign'] = np.sign(self._bars.meanret)

CODE#2:       
    self._bars.loc[self._bars.index[-1],'ret'] = (
        np.log(self._bars.close.iloc[-1]) 
        - self._bars.close.rolling(f'{self._rollingSec}s').apply(lambda x: np.log(x[0])).iloc[-1])
    self._bars.loc[self._bars.index[-1],'meanret'] = (
        self._bars.ret.rolling(f'{self._rollingSecExt}s').mean().ffill().iloc[-1])
    self._bars.loc[self._bars.index[-1],'sign'] = (
        np.sign(self._bars.meanret.iloc[-1]))

CODE#3:
    self._bars.loc[self._bars.index[-1],'ret'] = (
        np.log(self._bars.close.iloc[-1]) 
        - self._bars.close.iloc[-self._rollingWindow:].rolling(f'{self._rollingSec}s').apply(lambda x: np.log(x[0])).iloc[-1])
    self._bars.loc[self._bars.index[-1],'meanret'] = (
        self._bars.ret.iloc[-self._rollingWindow:].rolling(f'{self._rollingSecExt}s').mean().ffill().iloc[-1])
    self._bars.loc[self._bars.index[-1],'sign'] = (
        np.sign(self._bars.meanret.iloc[-1]))

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)