Попробуйте это:
Построить почасовой набор
s = pd.date_range(df1.index[0], df1.index[-1]+pd.DateOffset(1), freq='H')
idx = pd.period_range(df1.index[0], df1.index[-1]+pd.DateOffset(1), freq='H')
idx = idx[:-1]
Найти, когда индекс находится в диапазоне Intime
и Outtime
sol = [int((s[i] >= df1.iloc[j,1] - pd.DateOffset(hours=1)) & (s[i] <= df1.iloc[j,2])) for j in range(len(df1)) for i in range(len(idx))]
Используйте numpy, чтобы преобразовать список в более дружественный формат
sol2 = np.array(sol)
sol3 = np.reshape(sol2, (s.shape[0]-1,len(df1)),order = 'F')
Сборка нужной серии
ans = pd.Series(np.amax(sol3, axis=1),idx.values)
показать результаты
print(ans)
вывод (за последний день):
2018-06-29 00:00 0
2018-06-29 01:00 0
2018-06-29 02:00 0
2018-06-29 03:00 0
2018-06-29 04:00 0
2018-06-29 05:00 0
2018-06-29 06:00 0
2018-06-29 07:00 1
2018-06-29 08:00 1
2018-06-29 09:00 1
2018-06-29 10:00 1
2018-06-29 11:00 1
2018-06-29 12:00 1
2018-06-29 13:00 1
2018-06-29 14:00 1
2018-06-29 15:00 1
2018-06-29 16:00 0
2018-06-29 17:00 0
2018-06-29 18:00 0
2018-06-29 19:00 0
2018-06-29 20:00 0
2018-06-29 21:00 0