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

Pandas中满足CLOSE大于SUBMISSION条件时计算累计日期差值问题

Pandas工单累计日期差值计算方案

核心逻辑

对每一行的CLOSE日期,匹配所有工单的SUBMISSION日期,仅统计CLOSE > SUBMISSION的日期差值,将这些差值的天数求和即为当前行的ACCUM_DATE_DELTA值。

实现代码

基础实现(小数据量适用,可读性高)

import pandas as pd

# 初始化样例数据
df = pd.DataFrame({'REF_KEY': [1, 2, 3, 4, 5], 
                   'SUBMISSION': ['2018-08-21', '2018-09-03', '2018-09-07', '2018-09-06', '2018-08-28'], 
                   'CLOSE': ['2018-09-05', '2018-09-12', '2018-09-18', '2018-09-24', '2018-09-27']})

# 转换为日期格式
df['CLOSE'] = pd.to_datetime(df['CLOSE'])
df['SUBMISSION'] = pd.to_datetime(df['SUBMISSION'])

# 提取所有提交日期
all_submission = df['SUBMISSION'].tolist()

def calculate_delta(row):
    # 筛选符合条件的提交日期
    valid_sub = [s for s in all_submission if s < row['CLOSE']]
    # 计算差值总和
    return sum((row['CLOSE'] - sub).days for sub in valid_sub)

df['ACCUM_DATE_DELTA'] = df.apply(calculate_delta, axis=1)

# 查看结果
print(df)

高性能实现(大数据量适用,广播运算)

如果数据量较大,可使用numpy广播替代apply提升运算效率:

import numpy as np

close_arr = df['CLOSE'].values[:, np.newaxis]
sub_arr = df['SUBMISSION'].values[np.newaxis, :]
# 生成符合条件的掩码
valid_mask = close_arr > sub_arr
# 计算所有符合条件的差值总和
df['ACCUM_DATE_DELTA'] = ((close_arr - sub_arr) * valid_mask).astype('timedelta64[D]').sum(axis=1)

输出结果

运行后得到的结果和预期完全一致:

REF_KEY SUBMISSION      CLOSE  ACCUM_DATE_DELTA
0        1 2018-08-21 2018-09-05                25
1        2 2018-09-03 2018-09-12                57
2        3 2018-09-07 2018-09-18                86
3        4 2018-09-06 2018-09-24               116
4        5 2018-08-28 2018-09-27               131

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:06:01