我有一个数据集,其中包含不同会议室(从会议室日历中导出)的会议开始/结束时间,为期几个月。我想创建一个热图,该图将显示平均一天的每小时利用率(假设星期一)。 我制作了一个模型来显示我想要的结果: Wanted mock-up
这将在此Heatmap guide之后使用Plot.ly完成。
到目前为止,我已经为一周中的每一天制作了数据框,并按房间名称对其进行了排序
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
我想知道如何处理这些数据以创建平均一天和该天的每小时间隔,其中将包含预订的某些房间的出现次数。
谢谢
答案 0 :(得分:0)
假设您的框架称为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