我没有正确使用我的条件语句,也不知道我是否需要while循环或for循环而不是我正在尝试的循环。我的代码希望做的是查看前四行的tl
或bl
值,如果tl > Upper
或bl < Lower
那么我们需要确保{{1} }}。
第一步是检查(current_row['difference'] > 0) & (row_minus1['difference'] < 0)
语句,即or
,然后检查row_minus1['tl'] > Upper or...row_minus4['tl'] > Upper...or row_minus4['bl'] < Lower
条件。
(current_row['difference'] > 0) & (row_minus1['difference'] < 0)
答案 0 :(得分:0)
从你的问题不清楚,实际上是错的。
首先。我认为你的第一行中的括号数有问题,如果
if ((current_row['difference'] > 0) & (row_minus1['difference'] < 0))
开 - 开 - 关 - 开 - 收 - 关
3 - 3 = 0.因此最后关闭的小门会发出错误
二。如果i <3,则存在逻辑问题。假设i = 0,所以你得到data.iloc [0-1]。我想这不是你想要的。如果您想跳过前4个项目,可以使用
更改第一行for i in range(4, len(data)):
在这种情况下,您不会遇到负面索引问题。
第三。在python中&
是一个按位和。对于布尔值,它可以正常工作,但最好用and
替换。
等等。您可以使用向量到标量比较来简化条件检查
data.iloc[i-4:i].loc[:, 't1'] > Upper
这将为您提供一系列True | False值。你需要检查这是否为True,这是由.any()
第五。在python变量名称中以小写字母开头,因此最好将变量重命名为lower, upper
所以我们来看看那段代码
for i in range(4, len(data)):
current_row = data.iloc[i, :]
previous_row = data.iloc[i-1, :]
if ((current_row['difference'] > 0) and
(previous_row['difference'] < 0) and (
(data.iloc[i-4:i].loc[:, 'tl'] > upper).any() or
(data.iloc[i-4:i].loc[:, 'bl'] < lower).any())):
do_what_you_need