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

如何按Project Id计算Technical Analysis与Approval的结束日期间隔天数?

按Project Id计算指定任务的日期间隔解决方案

核心问题分析

你之前的代码返回相同天数,本质是没有按Project Id分组计算,而是全局取了两个任务的日期差,导致所有项目共用同一个结果。要解决这个问题,核心是按项目分组后,分别提取目标任务的日期再计算差值。

具体实现步骤(基于Pandas)

1. 先确保日期列是datetime类型

如果End Date还不是日期格式,先转换:

import pandas as pd

# 转换日期列格式
df['End Date'] = pd.to_datetime(df['End Date'])

2. 方法一:用透视表(Pivot Table)计算

先把每个项目的两个任务日期转成单独列,再计算差值,最后合并回原数据集:

# 生成透视表,每个Project Id对应两个任务的End Date
pivot_df = df.pivot_table(
    index='Project Id',
    columns='Task Name',
    values='End Date',
    aggfunc='first'  # 若同一项目同一任务有多条记录,可换成min/max取最早/最晚日期
).reset_index()

# 计算两个任务的天数差
pivot_df['Days Between'] = (pivot_df['Approval'] - pivot_df['Technical Analysis']).dt.days

# 合并回原数据集,给所有行添加对应项目的天数差
df = df.merge(pivot_df[['Project Id', 'Days Between']], on='Project Id', how='left')

3. 方法二:分组后自定义函数计算

直接按Project Id分组,在每个组内提取目标任务日期并计算:

def calc_task_interval(group):
    # 提取当前组内两个任务的日期
    tech_date = group.loc[group['Task Name'] == 'Technical Analysis', 'End Date'].iloc[0]
    approval_date = group.loc[group['Task Name'] == 'Approval', 'End Date'].iloc[0]
    # 返回天数差
    return (approval_date - tech_date).days

# 分组计算后,将结果映射到原数据集的新列
df['Days Between'] = df.groupby('Project Id').apply(calc_task_interval).reset_index(drop=True)

关键注意事项

  • 确保每个Project Id下存在且唯一对应Technical Analysis和Approval任务记录,若有重复,需调整aggfunc(比如用min取最早完成日期)
  • 无论Task Name列有多少其他任务,上述方法只会提取指定的两个任务进行计算,不受其他任务干扰

内容的提问来源于stack exchange,提问作者Beatriz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:59:54