【发布时间】:2018-10-16 21:54:48
【问题描述】:
考虑以下数据:
Index Task Start Finish
0 RandomName 2018-10-15T13:30:00+00:00 2018-10-15T13:41:00+00:00
1 RandomName 2018-10-15T13:40:00+00:00 2018-10-15T13:51:00+00:00
2 RandomName 2018-10-15T13:50:00+00:00 2018-10-15T13:51:00+00:00
3 RandomName 2018-10-15T14:10:00+00:00 2018-10-15T14:11:00+00:00
4 RandomName 2018-10-15T14:20:00+00:00 2018-10-15T14:21:00+00:00
5 RandomName 2018-10-15T14:30:00+00:00 2018-10-15T14:31:00+00:00
我要做的是生成此数据帧的 5 分钟段(一种时隙),并计算这些任务在所述段中发生的次数并尝试将其可视化。由于这些任务有持续时间,我首先必须通过以下方式生成细分:
import pandas as pd
from datetime import datetime, timedelta
def main():
input_file = "input.csv"
df = pd.read_csv(
input_file
,parse_dates=['Start','Finish']
,names=['Index', 'Job', 'Start', 'Finish']
,index_col='Index'
,header=None
)
# Find the duration of each task.
df['Start'] = pd.to_datetime(df['Start'],dayfirst=True, errors='coerce')
df['Finish'] = pd.to_datetime(df['Finish'],dayfirst=True, errors='coerce')
df.loc[:,'Duration'] = df['Finish'].dt.minute - df['Start'].dt.minute
# Define the range and split it into 5 minute segments
rng_min = df['Start'].min() # Earliest Date
rng_max = df['Finish'].max() # Latest Date
current = rng_min
while current < rng_max:
current += timedelta(minutes=5)
if __name__ == "__main__":
main()
一个任务可以扩展到几个 5 分钟的片段,所以它不是一个简单的计数。从这一点开始,我完全不知道该怎么做,所以任何帮助都将不胜感激!
谢谢!
编辑 - 添加更多信息:
任务无关紧要,因为这里的目标是产生空的(可用的)5 分钟片段
编辑 2 - 添加它的外观:
Timeslot Start Time End Time Tasks Running
1 10/15/18 13:30 10/15/18 13:35 1
2 10/15/18 13:35 10/15/18 13:40 1
3 10/15/18 13:40 10/15/18 13:45 2
4 10/15/18 13:45 10/15/18 13:50 3
【问题讨论】:
-
您的预期输出是什么样的?
-
添加到帖子中 - 谢谢!
-
可以按如下方式完成: (a) 创建一个字典,键为开始时间,开始时间+5,开始时间+10分钟,直到你覆盖最后一条记录的开始时间。 (b) 将每个任务的完成时间与每个键进行比较。如果它大于键值,则将其附加为列表值。所以你将拥有 {'start_window1':['T1','T2'], 'start_window2':['T1','T2'] ...} 等等,其中 T1,T2 是任务名称(c)计算与键对应的每个列表的长度,以便得到您需要的答案,