Python 在for循环中访问过去的日期时间
我目前正在处理一个问题,现在不得不执行其中一个步骤。为了探索可能性,我制作了下面的示例,这是一个简单的场景。这篇文章的篇幅可能很吓人,但这只是我试图更好地解释它 现在的情况是,每秒钟都有一个for循环,变量_1,它是用来设置Python 在for循环中访问过去的日期时间,python,pandas,datetime,Python,Pandas,Datetime,我目前正在处理一个问题,现在不得不执行其中一个步骤。为了探索可能性,我制作了下面的示例,这是一个简单的场景。这篇文章的篇幅可能很吓人,但这只是我试图更好地解释它 现在的情况是,每秒钟都有一个for循环,变量_1,它是用来设置变量_2的参考值。这段代码的作用是,每秒钟,它都会将变量_1[i]与变量_2i进行比较,如果差值大于1.5,则更新变量_2i。最后,结果存储在变量2中 import pandas as pd import numpy as np df = pd.DataFrame() st
变量_2
的参考值。这段代码的作用是,每秒钟,它都会将变量_1[i]
与变量_2i
进行比较,如果差值大于1.5,则更新变量_2i
。最后,结果存储在变量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个单位的速率更新变量_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
注意列变量_2的最后一个值的差异,以便更好地理解我的意思。从目前为止我自己的想法来看,必须有一种方法来保持引用值,而不必在for循环中更新或访问过去的datetime,但是由于我对python非常陌生,我不确定这种想法是否存在
希望我能做到简明扼要。我非常感谢你在这件事上的帮助 希望我能理解你在这里寻找什么 在for循环外部声明一个
target
变量。这将保存将在0.3的步骤中移动的值:
target = Variable_2i
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
每当达到指定的val
阈值时设置目标
,并且变量_2i
的差值大于或等于1.5
:
if abs(val - Variable_2i) >= 1.5:
target = val
在循环时,如果目标
大于变量_2i
,则希望通过0.3
步向它:
target = Variable_2i
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
注意:这将朝着最初触发更改的方向前进,直到它到达为止,即使实际值向后摆动。快速提示:不要使用.values
,除非绝对必要,否则不要显式迭代数据帧或序列。这应该是最后的手段。