熊猫之间() 超过 24 小时的时间范围



我在使用熊猫between()功能时遇到问题。 我有datetime.timestamp值,正在检查时间是否发生在datetime.time值范围内。

如果我的时间范围Start在给定的一天内小于End时间,它就可以工作。

import pandas as pd
dProd=[{ 'Time' : '2021-10-20 20:32:00'},
{'Time' : '2021-10-21 11:50:00'},
{'Time' : '2022-01-11 20:10:00'}]
dfProd = pd.DataFrame(dProd)
dfProd['Time'] = pd.to_datetime(dfProd['Time'])
dfProd['Pure_Time'] = dfProd['Time'].dt.time
dRange=[{'Start': '11:45', 'End' :'20:20'}]
dfRange = pd.DataFrame(dRange)
dfRange['Start'] = pd.to_datetime(dfRange['Start'],format= '%H:%M' ).dt.time
dfRange['End'] = pd.to_datetime(dfRange['End'],format= '%H:%M' ).dt.time
dfProd['Pure_Time'].between(dfRange['Start'].iloc[0],dfRange['End'].iloc[0])

输出正如我所期望的那样,between工作正常。

0    False
1     True
2     True

但是,如果我的时间范围"超过一天结束时",似乎什么都不会返回True

dRange=[{'Start': '20:00', 'End' :'2:00'}]
dfRange = pd.DataFrame(dRange)
dfRange['Start'] = pd.to_datetime(dfRange['Start'],format= '%H:%M' ).dt.time
dfRange['End'] = pd.to_datetime(dfRange['End'],format= '%H:%M' ).dt.time
dfProd['Pure_Time'].between(dfRange['Start'].iloc[0],dfRange['End'].iloc[0])

对于所有值,输出始终False

0    False
1    False
2    False

我希望02是真的,因为它们介于22:002:00之间,"大约"在 24 小时大关附近。 有没有办法实现这一目标? 我知道没有整数是between(4,-1)但我希望datetime.time的工作方式不同。

使用DataFrame.between_time.您需要将 datetime64[ns] 值设置为索引,但这允许您在一天结束时"结束"切片而不会出现问题。使用此方法,您甚至不需要创建"Pure_Time"列。

dfProd.set_index('Time').between_time('20:00', '2:00')
#                    Pure_Time
#Time                         
#2021-10-20 20:32:00  20:32:00
#2022-01-11 20:10:00  20:10:00

最新更新