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

如何用Python计算Event A与Event B的间隔天数(取最新A事件日期)

用Python计算最新Event A到Event B的工作日间隔天数

解决思路

类比你熟悉的SQL分组聚合逻辑,我们可以用pandas库(Python处理表格数据的标准工具)自动完成每个CaseID的最新Event A提取、Event B匹配,以及工作日间隔计算,全程无需手动去重。

完整代码实现

import pandas as pd
import numpy as np

# 1. 准备示例数据(替换成你的实际数据读取逻辑,比如pd.read_csv)
data = [
    [1, 'A', '1/1/23'],
    [1, 'A', '1/3/23'],
    [1, 'A', '1/20/23'],
    [1, 'B', '2/1/23'],
    [8, 'A', '1/2/23'],
    [100, 'A', '3/1/23'],
    [100, 'B', '3/2/23'],
    [35, 'A', '2/13/23'],
    [35, 'B', '2/27/23'],
    [6, 'A', '2/14/23'],
    [33, 'A', '2/26/23'],
    [2, 'A', '3/4/23'],
    [2, 'B', '4/30/23']
]
df = pd.DataFrame(data, columns=['CaseID', 'EVENT', 'DATE'])

# 2. 将日期字符串转换为datetime类型(必须步骤,否则无法计算)
df['DATE'] = pd.to_datetime(df['DATE'], format='%m/%d/%y')

# 3. 提取每个CaseID的最新Event A日期
latest_a = df[df['EVENT'] == 'A'].groupby('CaseID')['DATE'].max().reset_index()
latest_a.rename(columns={'DATE': 'Latest_A_Date'}, inplace=True)

# 4. 提取每个CaseID的Event B日期(假设每个CaseID最多一个B事件)
event_b = df[df['EVENT'] == 'B'].groupby('CaseID')['DATE'].first().reset_index()
event_b.rename(columns={'DATE': 'Event_B_Date'}, inplace=True)

# 5. 合并数据,只保留同时有A和B记录的CaseID
result = pd.merge(latest_a, event_b, on='CaseID', how='inner')

# 6. 计算工作日间隔(排除周末,不包含节假日;如需包含节假日可添加参数)
result['busdaysbweventAB'] = np.busday_count(
    result['Latest_A_Date'].dt.date,
    result['Event_B_Date'].dt.date
)

# 7. 输出最终结果(只保留需要的列)
final_output = result[['CaseID', 'busdaysbweventAB']]
print(final_output)

代码解释

  • 步骤3对应SQL逻辑:SELECT CaseID, MAX(DATE) AS Latest_A_Date FROM table WHERE EVENT='A' GROUP BY CaseID
  • 步骤4对应SQL逻辑:SELECT CaseID, DATE AS Event_B_Date FROM table WHERE EVENT='B' GROUP BY CaseID
  • np.busday_count自动排除周六周日计算工作日数量,若需排除自定义节假日,可传入holidays参数(例如holidays=['2023-01-01'])

运行结果

CaseIDbusdaysbweventAB
110
241
3510
1001

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:37:40