You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算流程步骤间平均间隔天数并合并流程平均时长?

解决方案:计算任务平均时长与任务间间隔并合并

步骤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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 05:00:44