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

使用Pandas计算全部任务已关闭的交易的工作日时长

解决Pandas计算交易工作日时长问题

原代码存在的问题

  • 生成closed_deals时丢失了DEAL标识,导致无法正确筛选对应交易的数据
  • 计算时长时未按交易分组,且未使用工作日计算逻辑
  • 合并时长数据时缺少关联的DEAL列,无法正确匹配

修正后的完整代码

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'START DATE': ['01/01/2023', '01/01/2023', '01/20/2023', '01/22/2023', '01/13/2023', '01/12/2023'],
    'END DATE': ['01/10/2023', '01/15/2023', '01/23/2023', '01/24/2023', '01/14/2023', '01/13/2023'],
    'DEAL': ['D1', 'D1', 'D2', 'D3', 'D4', 'D4'],
    'TASK': ['T1', 'T2', 'T3', 'T4', 'T5', 'T6'],
    'STATUS': ['Closed', 'Closed', 'Open', 'Closed', 'Open', 'Closed']
})

# 转换日期列为datetime格式,明确格式避免自动识别错误
df['START DATE'] = pd.to_datetime(df['START DATE'], format='%m/%d/%Y')
df['END DATE'] = pd.to_datetime(df['END DATE'], format='%m/%d/%Y')

# 按DEAL分组,完成状态校验、日期提取
deal_summary = df.groupby('DEAL').agg(
    ALL_CLOSED=('STATUS', lambda x: all(x == 'Closed')),
    START_DATE_MIN=('START DATE', 'min'),
    END_DATE_MAX=('END DATE', 'max')
).reset_index()

# 筛选全Closed的交易,计算工作日时长
closed_deals_result = deal_summary[deal_summary['ALL_CLOSED']].copy()
closed_deals_result['DURATION'] = np.busday_count(
    closed_deals_result['START_DATE_MIN'].values.astype('datetime64[D]'),
    closed_deals_result['END_DATE_MAX'].values.astype('datetime64[D]')
)

# 整理列名与格式,匹配示例输出
closed_deals_result = closed_deals_result.rename(columns={
    'START_DATE_MIN': 'START DATE',
    'END_DATE_MAX': 'END DATE',
    'ALL_CLOSED': 'STATUS'
})
closed_deals_result['STATUS'] = 'Closed'
closed_deals_result = closed_deals_result[['START DATE', 'END DATE', 'DEAL', 'STATUS', 'DURATION']]

print(closed_deals_result)

代码说明

  1. 日期转换:指定%m/%d/%Y格式,确保日期解析准确
  2. 分组聚合:一次完成交易的状态校验、最早开始日期、最晚结束日期提取
  3. 工作日计算:用np.busday_count自动排除周末,计算工作日数量
  4. 格式整理:调整列名和顺序,输出与示例一致的结果

运行结果

START DATEEND DATEDEALSTATUSDURATION
2023-01-012023-01-15D1Closed10
2023-01-222023-01-24D3Closed1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:58:18