我在使用熊猫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
我希望0
和2
是真的,因为它们介于22:00
和2: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