以下是我的数据集的示例:
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 LOOP将在某个t处获取速度值,并将其与10秒钟后的速度值进行比较。如果较大,则打印较大,否则,较小。
感谢您的帮助。谢谢。
答案 0 :(得分:1)
您似乎正在使用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')
由于它是 date 范围函数,它将返回日期时间
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')
此后,为了使用此索引访问数据框,您有两个选择:
.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'] ..):
set_index()
重新定义数据帧索引,然后按时间直接访问它: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')]):