我目前正在研究一个问题,现在被困在执行其中一个步骤中。为了弥补可能性,我组成了以下示例,这是一个简单的场景。文本的长度可能很吓人,但这只是我试图更好地解释它并使其尽可能清晰。标题听起来可能令人困惑,但问题已得到明确描述。
在阅读之前,我只是想过一个主意:有一个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条件触发的第二个条件继续运行?
希望我能简洁明了,尽管篇幅很长。非常感谢您在此方面的帮助!