gpt4 book ai didi

python - 迭代时间序列

转载 作者:太空宇宙 更新时间:2023-11-04 04:18:17 25 4
gpt4 key购买 nike

以下是我的数据集的示例:

index      time      speed
0 00:00:00 15
1 00:00:05 18
2 00:00:10 23
3 00:00:15 25
4 00:00:20 34

我想创建一个与下面功能相同的 for 循环:

for i in range (0,5,1):
if df.speed[i] > df.speed [i+2]:
print ('Larger')
else:
print('Smaller')

但是,我想在 FOR 循环中引用时间而不是索引。例如:

for t in range (00:00:00, 00:00:20 , 5s):
if df.speed[t] > df.speed [t+10s]:
print ('Larger')
else:
print('Smaller')

所以 FOR 循环会在某个 t 取速度值,并与它比较 10 秒后的速度值。如果它较大,则打印 Larger,否则打印 Smaller。

我很感激任何帮助。谢谢。

最佳答案

日期范围(秒)

看来您正在使用 pandas。如果是这样,您真的应该看看它的时间序列功能:https://pandas.pydata.org/pandas-docs/stable/timeseries.html

更具体的,在pandas.date_range():

import pandas as pd

pd.date_range('00:00:00', '00:00:20', freq='5s')

因为它是一个日期范围函数,所以它会返回日期时间

DatetimeIndex(['2019-03-06 00:00:00',
'2019-03-06 00:00:05',
...,
'2019-03-06 00:00:20'], dtype='datetime64[ns]', freq='5S')

从这里只需使用 .strftime() 即可获得您想要的:

pd.date_range('00:00:00', '00:00:20', freq='5s').strftime('%H:%M:%S')

返回

Index(['00:00:00', '00:00:05', ..., '00:00:20'], dtype='object')


按时间访问dataframe

之后,为了使用该索引访问您的数据框,您有两个选择:

  1. 使用.loc找到这个时间所在的行:
for time in pd.date_range('00:00:00', '00:00:20', freq='5s').strftime('%H:%M:%S'):
if (df.loc[df['time'] == time, 'speed'] ..):
  1. 通过set_index()重新定义dataframe索引,然后直接按时间访问:
df.set_index('time', inplace=True)
for time in pd.date_range('00:00:00', '00:00:20', freq='5s').strftime('%H:%M:%S'):
if (df.speed[time] ...):

编辑以解决评论问题

在您使用 strftime() 之后,它被转换为一个字符串。您可以将其转换回以添加 10 秒,例如:

df.speed[(pd.to_datetime(time) + pd.to_timedelta(10, unit='s')).strftime('%H:%M:%S')].

或者:

for time in pd.date_range('00:00:00', '00:00:20', freq='5s'):
if (df.speed[time.strftime('%H:%M:%S')]>df.speed[(time + pd.to_timedelta(10, unit='s')).strftime('%H:%M:%S')]):

关于python - 迭代时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55032453/

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