У меня был go.
df=pd.DataFrame({'EventId':[18,19,20,21], 'startTime':['2013-04-11 07:33:11.735342100','2013-04-10 16:33:46.575337300','2013-04-10 08:17:04.033083300','2013-04-11 00:10:24.293352100'],'EndTime':['2013-04-11 08:16:47.976164100','2013-04-11 18:10:08.428443900','2013-04-11 09:10:13.907757900','2013-04-11 18:45:17.754240800']})
Приведите даты в datetime
df['startTime']=pd.to_datetime(df['startTime'])
df['EndTime']=pd.to_datetime(df['EndTime'])
df.set_index(['startTime'], inplace=True)
Установите для каждого периода времени начало и конец для индексации и извлеките подходящее время, используя .between_time
df['StartHr']=df.index.time
a=df.iloc[:,:1].between_time('07:00:00', '09:00:00')
df.reset_index(inplace=True)
a.reset_index(inplace=True)
df.set_index(['EndTime'], inplace=True)
df['EndHr']=df.index.time
b=df.iloc[:,:-2].between_time('07:00:00', '09:00:00')
b.reset_index(inplace=True)
Объединение двух результатов
df2=pd.merge(a, b, on='EventId')