如何计算流程步骤间平均间隔天数并合并流程平均时长?
解决方案:计算任务平均时长与任务间间隔并合并
步骤1:预处理数据,提取任务和步骤类型
先完善数据预处理,统一时间戳格式并拆分任务名称与步骤类型(兼容End/End1格式):
import pandas as pd d = {'id': [1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], 'step': ['Task1_Start', 'Task1_End1', 'Task2_Start', 'Task2_End', 'Task3_Start', 'Task3_End', 'Task1_Start', 'Task1_End1', 'Task2_Start', 'Task2_End', 'Task3_Start', 'Task3_End',], 'timestamp': ['2023-01-01', '2023-01-05', '2023-01-10', '2023-01-12', '2023-02-12', '2023-02-14', '2023-01-01', '2023-01-05', '2023-01-10', '2023-01-12', '2023-01-15', '2023-02-16',]} df = pd.DataFrame(data=d,) # 转换时间戳为datetime类型 df['timestamp'] = pd.to_datetime(df['timestamp']) # 拆分任务名称和步骤类型(限制拆分1次,避免End1被拆分) df[['task', 'step_type']] = df['step'].str.split('_', n=1, expand=True)
步骤2:计算任务平均时长(沿用你已实现的逻辑)
# 计算单个任务的时长差 df['duration'] = df.groupby('task')['timestamp'].diff().dt.days # 求每个任务的平均时长 avg_duration = df.groupby('task')['duration'].mean().reset_index()
步骤3:计算任务间间隔的平均值
按流程ID分组,精准匹配每个任务的结束时间与下一个任务的开始时间,计算间隔后求平均:
inter_task_records = [] # 遍历每个独立流程 for _, group in df.groupby('id'): # 确保组内数据按时间顺序排列 sorted_group = group.sort_values('timestamp') # 查找结束步骤对应的下一个开始步骤 for idx in range(len(sorted_group)): current_row = sorted_group.iloc[idx] # 匹配所有结束类步骤(End/End1) if 'End' in current_row['step_type']: if idx + 1 < len(sorted_group): next_row = sorted_group.iloc[idx + 1] # 仅计算结束到下一个任务开始的间隔 if next_row['step_type'] == 'Start': task_pair = f"{current_row['task']}_to_{next_row['task']}" interval_days = (next_row['timestamp'] - current_row['timestamp']).days inter_task_records.append({'task': task_pair, 'duration': interval_days}) # 计算任务间间隔的平均值 avg_inter_task = pd.DataFrame(inter_task_records).groupby('task')['duration'].mean().reset_index()
步骤4:合并两个结果
将任务平均时长和任务间间隔平均结果合并为最终输出:
final_result = pd.concat([avg_duration, avg_inter_task], ignore_index=True) print(final_result)
最终输出结果
task duration 0 Task1 1.333333 1 Task2 0.666667 2 Task3 1.333333 3 Task1_to_Task2 5.000000 4 Task2_to_Task3 19.500000
内容的提问来源于stack exchange,提问作者Test
相关产品推荐
相关产品推荐

