在python中查找开始时间和结束时间之间的时隙

时间:2017-03-31 09:01:35

标签: python csv pandas

我们有包含预定义时间段的csv文件。 根据用户提供的开始时间和结束时间,我们希望在开始时间和结束时间之间存在时隙。

例如

start time =11:00:00
end time=19:00:00

output- slot_no 2,3,4,5

image

1 个答案:

答案 0 :(得分:0)

我认为您需要boolean indexing locbetween来选择列Slot_no,所有列和值都会被转换为to_timedeltamidnight }被替换为24:00:00

df = pd.DataFrame(
{'Slot_no':[1,2,3,4,5,6,7],
'start_time':['0:01:00','8:01:00','10:01:01','12:01:00','14:01:00','18:01:01','20:01:00'],
'end_time':['8:00:00','10:00:00','12:00:00','14:00:00','18:00:00','20:00:00','0:00:00']})
df = df.reindex_axis(['Slot_no','start_time','end_time'], axis=1)                 
df['start_time'] = pd.to_timedelta(df['start_time'])
df['end_time'] = pd.to_timedelta(df['end_time'].replace('0:00:00', '24:00:00'))
print (df)
   Slot_no  start_time        end_time
0        1    00:01:00 0 days 08:00:00
1        2    08:01:00 0 days 10:00:00
2        3    10:01:01 0 days 12:00:00
3        4    12:01:00 0 days 14:00:00
4        5    14:01:00 0 days 18:00:00
5        6    18:01:01 0 days 20:00:00
6        7    20:01:00 1 days 00:00:00
start = pd.to_timedelta('11:00:00')
end = pd.to_timedelta('19:00:00')

mask = df['start_time'].between(start, end) | df['end_time'].between(start, end)

s = df.loc[mask, 'Slot_no']
print (s)
2    3
3    4
4    5
5    6
Name: Slot_no, dtype: int64

L = df.loc[mask, 'Slot_no'].tolist()
print (L)
[3, 4, 5, 6]