Python 迭代时间序列
以下是我的数据集示例:Python 迭代时间序列,python,for-loop,if-statement,time,jupyter,Python,For Loop,If Statement,Time,Jupyter,以下是我的数据集示例: 索引时间速度 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循环,其功能与以下相同: 范围(0,5,1)内的i的: 如果测向速度[i]>测向速度[i+2]: 打印('大') 其他: 打印('较小') 然而,我想在FOR循环中指的是时间而不是索引。例如: 适用于
索引时间速度
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循环,其功能与以下相同:
范围(0,5,1)内的i的:
如果测向速度[i]>测向速度[i+2]:
打印('大')
其他:
打印('较小')
然而,我想在FOR循环中指的是时间而不是索引。例如:
适用于范围内的t(00:00:00,00:00:20,5s):
如果测向速度[t]>测向速度[t+10s]:
打印('大')
其他:
打印('较小')
因此,FOR循环将获取某个t的速度值,并与10秒后的速度值进行比较。如果它较大,则打印较大,否则打印较小
谢谢你的帮助。谢谢。日期范围(秒)
似乎您正在使用熊猫
。如果是这样的话,你应该看看它的时间序列特征:
更具体地说,在pandas.date\u range()
:
因为它是一个日期范围函数,所以它将返回datetimes
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\u范围('00:00:00','00:00:20',freq='5s').strftime('%H:%M:%S')
返回
索引(['00:00:00','00:00:05',…,'00:00:20',dtype='object')
按时间访问数据帧 之后,为了使用此索引访问数据帧,您有两个选项:
.loc
查找此时间所在的行:set_index()
重新定义数据帧索引,然后直接按时间访问它:编辑以解决评论问题 使用
strftime()
后,它将转换为字符串。您可以将其转换回添加10秒,如:
df.speed[(pd.to_datetime(time)+pd.to_timedelta(10,unit='s')).strftime(“%H:%M:%s”)。
或:
谢谢你的回答。但是,对于if条件,我还想知道一点,即如何在时间上添加或删除秒数。例如:如果(df.speed[time]>df.speed[time+10]),或者它应该是(+00:00:10)还是(+10s')?
DatetimeIndex(['2019-03-06 00:00:00',
'2019-03-06 00:00:05',
...,
'2019-03-06 00:00:20'], dtype='datetime64[ns]', freq='5S')
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'] ..):
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] ...):
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')]):