Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从给定的开始时间到结束时间,按小时计算发生次数_Python_Pandas_Numpy_Plotly - Fatal编程技术网

Python 从给定的开始时间到结束时间,按小时计算发生次数

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

我有一个数据集,其中包含几个月内不同会议室(从会议室日历导出)会议的开始/结束时间。我想创建热图,它将显示平均每天(比如周一)每小时的利用率。 我制作了一个模型来展示我想要的结果:

这将使用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
我想知道如何处理这些数据,以创建一个平均每天和每小时的时间间隔,其中将包含某些房间被预订的次数


谢谢

假设您的框架名为
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