gpt4 book ai didi

python - 在 for 循环中访问过去的日期时间

转载 作者:行者123 更新时间:2023-12-01 06:49:01 24 4
gpt4 key购买 nike

我目前正在解决一个问题,但现在却陷入了实现其中一个步骤的困境。我编写了以下示例,这是一个简单的场景,以探索可能性。文本的长度可能会令人恐惧,但这只是我试图更好地解释它。

发生的事情是,我每秒都有一个 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

但是,假设现在我希望 Variable_2i 以每秒 0.3 个单位的速率更新,直到达到满足条件的值。这意味着我得到的结果与预期的结果类似:

               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

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

希望我能够做到简洁而准确。我非常感谢您在这方面的帮助!

最佳答案

希望我能理解您在这里寻找的内容。

在 for 循环之外声明一个 target 变量。这将保存将以 0.3 为步长移动的值:

target = Variable_2i

每当您达到 val 的指定阈值且 Variable_2i 的差异大于或等于 1.5 时,请设置一个目标 :

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

当您循环时,如果目标大于您的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

注意:这将朝着最初触发变化的方向迈进,直到到达那里,即使实际值向另一个方向摆动。

关于python - 在 for 循环中访问过去的日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59108847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com