有条件的四个单位

时间:2018-04-04 12:07:07

标签: python pandas for-loop conditional

我没有正确使用我的条件语句,也不知道我是否需要while循环或for循环而不是我正在尝试的循环。我的代码希望做的是查看前四行的tlbl值,如果tl > Upperbl < 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)

1 个答案:

答案 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