【问题标题】:Pandas conditional statement returning only zerosPandas 条件语句仅返回零
【发布时间】:2022-01-07 12:35:48
【问题描述】:

我正在使用显示财务数据的 DataFrame。我创建了一个类来轻松测试策略的多种变体。我创建了一个名为“postion”的新列,用于测试条件语句。起初我收到错误“系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。”但设法通过迭代每个项目来解决这个问题。

但是现在“位置”列的所有值都等于零,这对我来说没有意义,因为数据框中有多次出现,我可以看到条件为真。代码如下:

        for bar in range(len(self.data)):
           if self.data['close'].iloc[bar] > self.data['max_high'].iloc[bar]:
             self.data['position'] = 1
           elif self.data['close'].iloc[bar] < self.data['max_low'].iloc[bar]:
             self.data['position'] = -1
           else:
             self.data['position'] = 0

这是输出(下图):

DataFrame

提前感谢您的帮助

【问题讨论】:

  • 你可能想完全放弃这种方法并研究.loc.groupby.shift等等,以便在不这样循环的情况下计算这个。
  • self.data['position'] = 0整个 列分配给该值
  • 感谢大家的帮助,我明白我现在哪里出错了,如何改进执行

标签: python pandas algorithmic-trading trading metatrader5


【解决方案1】:

不要遍历你的 DataFrame,使用numpy.select:

import numpy as np

conditions = [data['close'].gt(data['max_high'), data['close'].lt(data['max_low'])]
data['position'] = np.select(conditions, [1, -1], 0)

【讨论】:

  • 谢谢,我会用这个改进执行
猜你喜欢
  • 1970-01-01
  • 2016-09-03
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
  • 2013-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多