Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果满足条件,如何用上一行替换列行_Python_Back Testing - Fatal编程技术网

Python 如果满足条件,如何用上一行替换列行

Python 如果满足条件,如何用上一行替换列行,python,back-testing,Python,Back Testing,我正试图加快我的交易策略回溯测试 现在,我有 for i in trange(1, len(real_choice), disable=not backtesting, desc="Converting HOLDs and calculating backtest correct/incorrect... [3/3]"): if (advice[i] == "HOLD"): advice[i] = advice[i-1]

我正试图加快我的交易策略回溯测试

现在,我有

for i in trange(1, len(real_choice), disable=not backtesting, desc="Converting HOLDs and calculating backtest correct/incorrect... [3/3]"):
      if (advice[i] == "HOLD"):
        advice[i] = advice[i-1]
      if (real_choice[i] == "HOLD"):
        real_choice[i] = real_choice[i-1]

      if advice[i] == real_choice[i]:
        correct[i] = "CORRECT"
      else:
        correct[i] =  "INCORRECT"
这部分代码花费的时间最长,所以我想加快速度

我正在学习Python,所以这很简单而且有效,但现在我要用回溯测试所花费的时间来支付


有没有更快的方法?

您可以使用
np.where
比较两列并为这些行赋值

correct = np.where( advice == real_choice
                     , "CORRECT", "INCORRECT)
但为了让它看起来更像熊猫,它会

df['correct'] = np.where( df['advice'] == df['real_choice']
                     , "CORRECT", "INCORRECT)
经过一些时间比较 (完整代码)

方法2的计算时间更短

method 1 1.0530679999999997
method 2 0.0022619999999999862

不幸的是,速度似乎较慢。也许我做错了什么?嗯,我想是的,我做了一些时间比较,请看编辑我现在看到了,我以前确实让它工作过,但现在我遇到了问题,因为代码的其余部分计算了正确率,而代码不适用于
np.where
将其转换为的数据类型。你知道如何解决这个问题吗,或者我应该问另一个问题吗?嗯,我想这可能对另一个问题很好,但我可能能提供帮助,以前的数据类型和现在的数据类型是什么?它只是我通过执行
correct=df['correct']
创建的一个熊猫数据框列。Type()返回
,如果有帮助的话。我在那之后使用的代码是
num\u incorrect=correct.str.count(“incorrect”).sum()
,这不再适用于更快的numpy方式。
method 1 1.0530679999999997
method 2 0.0022619999999999862