这是一个单行数据框:
import pandas as pd
import datetime
df = pd.DataFrame(columns = ['time', 'score'])
df.at[0, 'time'] = '2022-06-11 07:34:54.168327+00:00'
df.at[0, 'score'] = 2793.7
df['time'] = pd.to_datetime(df['time'])
我想检查这个数据帧的最后一行是否在两个时间之间,比如下午 4 点和晚上 9 点。我该怎么办?
谷歌搜索,似乎 Between_time 方法可能可用,但该命令似乎只选择这两个时间之间的行,因此它看起来并不直接适用于这个问题。天真的尝试
df.iloc[-1].between_time('16:00', '21:00')
也会返回 Index must be DatetimeIndex
错误。
我想人们可以使用
between_time
选择相关行,然后检查最后一行是否是这些行之一,但这似乎效率很低。
正如评论中提到的,最好的选择是将您的
time
列设置为索引并使用 between_time
。
但如果出于某种原因您不想这样做,您可以尝试以下方法:
last_row_time = df.iloc[-1]["time"]
# Specify your desired start and end time
start_time = pd.to_datetime('4:00').time()
end_time = pd.to_datetime('9:00').time()
print(start_time <= last_row_time.time() <= end_time)
第一个问题是通过
DatatimeIndex
创建
DataFrame.reset_index
,就像评论中提到的那样,第二个问题是DataFrame.between_time
没有为Series
实现,所以需要通过双[]
选择一列Dataframe:
#changed datime for match
df = pd.DataFrame(columns = ['time', 'score'])
df.at[0, 'time'] = '2022-06-11 17:34:54.168327+00:00'
df.at[0, 'score'] = 2793.7
df['time'] = pd.to_datetime(df['time'])
df = df.set_index('time')
print (df.iloc[[-1]].between_time('16:00', '21:00'))
score
time
2022-06-11 17:34:54.168327+00:00 2793.7
print (df.between_time('16:00', '21:00'))
score
time
2022-06-11 17:34:54.168327+00:00 2793.7