如何检查数据帧的最后一行是否有两个时间之间的时间戳?

问题描述 投票:0回答:2

这是一个单行数据框:

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
选择相关行,然后检查最后一行是否是这些行之一,但这似乎效率很低。

python pandas dataframe datetime
2个回答
0
投票

正如评论中提到的,最好的选择是将您的

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)

0
投票

第一个问题是通过

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
© www.soinside.com 2019 - 2024. All rights reserved.