Подсчет вхождений в почасовом периоде времени от заданного времени начала и окончания - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть набор данных, который содержит время начала / окончания собраний в разных комнатах собраний (экспортируется из календаря комнат собраний) в течение нескольких месяцев. Я хотел бы создать тепловую карту, которая будет показывать загрузку в час в среднем за день (скажем, в понедельник). Я сделал макет, чтобы показать, что я хочу в результате: Требуемый макет

Это будет сделано с помощью Plot.ly, следуя этому руководству Heatmap .

До сих пор я делал данные для каждого дня недели и сортировал их по названию комнаты

RoomName    Start               End
Room1       18.5.2018 7:00      18.5.2018 19:00
Room1       6.7.2018 7:00        6.7.2018 19:00
Room1       13.7.2018 7:00      13.7.2018 19:00
Room1       20.7.2018 7:00      20.7.2018 19:00
Room1       27.7.2018 7:00      27.7.2018 19:00
Room1       3.8.2018 7:00        3.8.2018 19:00
Room1       29.6.2018 7:00      29.6.2018 19:00
Room1       22.6.2018 7:00      22.6.2018 19:00
Room2       29.6.2018 9:00      29.6.2018 11:00
Room2       15.6.2018 9:00      15.6.2018 10:30
Room2       17.8.2018 10:00     17.8.2018 11:30
...         ...                 ...
Room8       10.8.2018 7:00      10.8.2018 19:00
Room8       17.8.2018 7:00      17.8.2018 19:00

Мне интересно, как обработать эти данные, чтобы создать средние дневные и часовые интервалы в этом дне, которые будут содержать количество вхождений определенного забронированного номера.

Спасибо

1 Ответ

0 голосов
/ 07 сентября 2018

Предполагая, что ваш кадр называется 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...