Python 从给定的开始时间到结束时间,按小时计算发生次数
我有一个数据集,其中包含几个月内不同会议室(从会议室日历导出)会议的开始/结束时间。我想创建热图,它将显示平均每天(比如周一)每小时的利用率。 我制作了一个模型来展示我想要的结果: 这将使用Plot.ly完成 到目前为止,我已经为一周中的每一天制作了数据框架,并按房间名称对其进行排序Python 从给定的开始时间到结束时间,按小时计算发生次数,python,pandas,numpy,plotly,Python,Pandas,Numpy,Plotly,我有一个数据集,其中包含几个月内不同会议室(从会议室日历导出)会议的开始/结束时间。我想创建热图,它将显示平均每天(比如周一)每小时的利用率。 我制作了一个模型来展示我想要的结果: 这将使用Plot.ly完成 到目前为止,我已经为一周中的每一天制作了数据框架,并按房间名称对其进行排序 RoomName Start End Room1 18.5.2018 7:00 18.5.2018 19:00 Room1 6.7.2018 7
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
我想知道如何处理这些数据,以创建一个平均每天和每小时的时间间隔,其中将包含某些房间被预订的次数
谢谢假设您的框架名为
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