Предполагая, что ваш кадр называется df
, похоже, вам необходимо переиндексировать его, чтобы получить по одной строке за 30 минут занятости для каждого номера (при условии, что это самый короткий срок бронирования). Вы можете сделать это так:
for col in ('Start', 'End'):
df[col] = pd.to_datetime(df[col])
bookings = []
for _, data in df.groupby(['RoomName', 'Start']):
new_index = pd.DatetimeIndex(
start=data['Start'].iloc[0], end=data['End'].iloc[0], freq='30Min'
)
data = data.set_index('Start').reindex(new_index).ffill()\
.reset_index(drop=False).rename({'index': 'Time'}, axis='columns')\
.drop('End', axis='columns')
bookings.append(data)
occupied_times = pd.concat(bookings, ignore_index=True)
Затем из первых нескольких строк вашего фрейма данных вы получите:
Time RoomName
0 2018-03-08 07:00:00 Room1
1 2018-03-08 07:30:00 Room1
2 2018-03-08 08:00:00 Room1
3 2018-03-08 08:30:00 Room1
4 2018-03-08 09:00:00 Room1
5 2018-03-08 09:30:00 Room1
6 2018-03-08 10:00:00 Room1
7 2018-03-08 10:30:00 Room1
8 2018-03-08 11:00:00 Room1
9 2018-03-08 11:30:00 Room1
10 2018-03-08 12:00:00 Room1
11 2018-03-08 12:30:00 Room1
12 2018-03-08 13:00:00 Room1
13 2018-03-08 13:30:00 Room1
14 2018-03-08 14:00:00 Room1
15 2018-03-08 14:30:00 Room1
16 2018-03-08 15:00:00 Room1
17 2018-03-08 15:30:00 Room1
18 2018-03-08 16:00:00 Room1
19 2018-03-08 16:30:00 Room1
20 2018-03-08 17:00:00 Room1
21 2018-03-08 17:30:00 Room1
22 2018-03-08 18:00:00 Room1
23 2018-03-08 18:30:00 Room1
24 2018-03-08 19:00:00 Room1
25 2018-05-18 07:00:00 Room1
26 2018-05-18 07:30:00 Room1
27 2018-05-18 08:00:00 Room1
28 2018-05-18 08:30:00 Room1
29 2018-05-18 09:00:00 Room1
.. ... ...
183 2018-07-27 11:00:00 Room1
184 2018-07-27 11:30:00 Room1
185 2018-07-27 12:00:00 Room1
186 2018-07-27 12:30:00 Room1
187 2018-07-27 13:00:00 Room1
188 2018-07-27 13:30:00 Room1
189 2018-07-27 14:00:00 Room1
190 2018-07-27 14:30:00 Room1
191 2018-07-27 15:00:00 Room1
192 2018-07-27 15:30:00 Room1
193 2018-07-27 16:00:00 Room1
194 2018-07-27 16:30:00 Room1
195 2018-07-27 17:00:00 Room1
196 2018-07-27 17:30:00 Room1
197 2018-07-27 18:00:00 Room1
198 2018-07-27 18:30:00 Room1
199 2018-07-27 19:00:00 Room1
200 2018-06-15 09:00:00 Room2
201 2018-06-15 09:30:00 Room2
202 2018-06-15 10:00:00 Room2
203 2018-06-15 10:30:00 Room2
204 2018-06-29 09:00:00 Room2
205 2018-06-29 09:30:00 Room2
206 2018-06-29 10:00:00 Room2
207 2018-06-29 10:30:00 Room2
208 2018-06-29 11:00:00 Room2
209 2018-08-17 10:00:00 Room2
210 2018-08-17 10:30:00 Room2
211 2018-08-17 11:00:00 Room2
212 2018-08-17 11:30:00 Room2