继续运行由第一个IF条件触发的第二个条件

时间:2019-12-03 20:00:35

标签: python dataframe datetime

我目前正在研究一个问题,现在被困在执行其中一个步骤中。为了弥补可能性,我组成了以下示例,这是一个简单的场景。文本的长度可能很吓人,但这只是我试图更好地解释它并使其尽可能清晰。标题听起来可能令人困惑,但问题已得到明确描述。

在阅读之前,我只是想过一个主意:有一个IF触发了一个条件,我想在下一个时间步长继续。所以请考虑:

df = pd.DataFrame()
start = pd.Timestamp('2013-08-14T00:00')
end = pd.Timestamp('2013-08-14T01:00')
t = np.linspace(start.value, end.value, 60*60+1)
df['Timestamp'] = pd.to_datetime(t)
df['Variable_1'] = 270 +  90*np.sin(2*np.pi*1*np.arange(3601)/3601)

df['Action']=(df['Timestamp'].dt.second % 5).eq(0)

Variable_2i = 270
target = Variable_2i
Variable_2 = np.array([])

for val in df['Variable_1'].values:
    if target != Variable_2i:
        separation = target - Variable_2i
        if abs(separation) > 0.3:
            Variable_2i += 0.3 if separation > 0 else -0.3
        else:
            Variable_2i = target
    elif abs(val - Variable_2i) >= 1.5:
        target = val

    Variable_2 = np.append(Variable_2, Variable_2i)

df['Variable_2'] = Variable_2

数据框的预期结果如下:

0    2013-08-14 00:00:00  270.000000    True  270.000000
1    2013-08-14 00:00:01  270.157036   False  270.000000
2    2013-08-14 00:00:02  270.314071   False  270.000000
3    2013-08-14 00:00:03  270.471106   False  270.000000
4    2013-08-14 00:00:04  270.628139   False  270.000000
5    2013-08-14 00:00:05  270.785170    True  270.000000
6    2013-08-14 00:00:06  270.942199   False  270.000000
7    2013-08-14 00:00:07  271.099225   False  270.000000
8    2013-08-14 00:00:08  271.256247   False  270.000000
9    2013-08-14 00:00:09  271.413266   False  270.000000
10   2013-08-14 00:00:10  271.570280    True  270.000000
11   2013-08-14 00:00:11  271.727290   False  270.300000
12   2013-08-14 00:00:12  271.884294   False  270.600000
13   2013-08-14 00:00:13  272.041293   False  270.900000
14   2013-08-14 00:00:14  272.198286   False  271.200000
15   2013-08-14 00:00:15  272.355271    True  271.500000
16   2013-08-14 00:00:16  272.512250   False  271.570280
17   2013-08-14 00:00:17  272.669221   False  271.570280
18   2013-08-14 00:00:18  272.826184   False  271.570280

请注意,当满足条件时会发生。该代码以0.3的步长更改变量_2i,直到达到使Abs(分离)> 0.3的变量_1的值为止。这就是问题所在,现在我想实现一个条件,其中代码将仅在满足if条件时进行检查,即ACTION = TRUE(每5秒)。所以我将循环修改为以下内容:

for i, val in enumerate(df['Variable_1'].values):

    if df['Action'][i] == True:
         if target != Variable_2i:
            separation = target - Variable_2i
            if abs(separation) > 0.3:
                Variable_2i += 0.3 if separation > 0 else -0.3
            else:
                Variable_2i = target
         elif abs(val - Variable_2i) >= 1.5:
            target = val

    Variable_2 = np.append(Variable_2, Variable_2i)

df['Variable_2'] = Variable_2

但是自然不会起作用,因为当ACTION不为TRUE时,条件将中断。所以我的问题是,我希望此条件触发第二个条件,该条件会在每个步骤中执行加法直到达到目标。我的问题是,显然,我希望第一个条件触发第二个条件,并且第二个条件继续执行应该执行的操作,即使第一个条件是否达到我设置的阈值也是如此。

那么,有没有办法让第一个IF条件触发的第二个条件继续运行?

希望我能简洁明了,尽管篇幅很长。非常感谢您在此方面的帮助!

0 个答案:

没有答案