在for循环中访问日期时间之后

问题描述 投票:0回答:1

我目前正在研究一个问题,现在被困在执行其中一个步骤中。为了弥补可能性,我组成了以下示例,这是一个简单的场景。文本的长度可能很吓人,但这只是我为更好地解释它的尝试。

发生的事情是我每秒都有一个for循环,我有Variable_1,它是一个用于设置Variable_2的参考值。此代码上发生的是,每秒将Variable_1[i]Variable_2i进行比较,如果差异大于1.5,则Variable_2i会更新。最后,结果存储在Variable_2

import pandas as pd
import numpy as np

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)

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

for i,val in enumerate(df['Variable_1'].values):    
    if abs(val - Variable_2i) >= 1.5:
        Variable_2i = val
    else:    
        Variable_2i = Variable_2i

    Variable_2 = np.append(Variable_2, Variable_2i)

df['Variable_2'] = Variable_2

但是,现在我希望以每秒0.3个单位的速率更新Variable_2i,直到达到满足条件的值为止。这意味着与其期望得到的结果,不像是这样:

               Timestamp  Variable_1  Variable_2
0    2013-08-14 00:00:00  270.000000  270.000000
1    2013-08-14 00:00:01  270.157036  270.000000
2    2013-08-14 00:00:02  270.314071  270.000000
3    2013-08-14 00:00:03  270.471106  270.000000
4    2013-08-14 00:00:04  270.628139  270.000000
5    2013-08-14 00:00:05  270.785170  270.000000
6    2013-08-14 00:00:06  270.942199  270.000000
7    2013-08-14 00:00:07  271.099225  270.000000
8    2013-08-14 00:00:08  271.256247  270.000000
9    2013-08-14 00:00:09  271.413266  270.000000
10   2013-08-14 00:00:10  271.570280  271.570280
11   2013-08-14 00:00:11  271.727290  271.570280
12   2013-08-14 00:00:12  271.884294  271.570280
13   2013-08-14 00:00:13  272.041293  271.570280
14   2013-08-14 00:00:14  272.198286  271.570280
15   2013-08-14 00:00:15  272.355271  271.570280

我会得到这样的东西:

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

请注意column Variable_2的最后一个值的区别,以更好地理解我的意思。从到目前为止我自己的想法来看,必须有一种方法可以保持引用值而不被更新或在for循环中访问过去的日期时间,但是由于我对python很陌生,所以我不确定是否存在这种想法。

希望我能做到简洁明了。非常感谢您在这一方面的帮助!

python pandas datetime
1个回答
0
投票

希望我在这里了解您的要求。

在for循环外声明一个target变量。这将保存将要在0.3中移动的值:

target = Variable_2i

只要达到target的指定阈值,并且val的差值大于或等于Variable_2i时,设置1.5

if abs(val - Variable_2i) >= 1.5:
    target = val

循环播放时,如果target大于您的Variable_2i,您想以0.3向它迈进:

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

全部叠加:

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

注意:这将首先触发触发更改的任何位置,直到到达那里为止,即使实际值向另一个方向回摆。

© www.soinside.com 2019 - 2024. All rights reserved.