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