You need to enable JavaScript to run this app. pandas中计算当前时间与Dataframe Creation列的时间差时排除周六周日
优惠活动
大模型
产品
解决方案
定价
更多

pandas中计算当前时间与Dataframe Creation列的时间差时排除周六周日

Pandas计算排除周末的时间差实现方案

原代码基础修正

你原来的代码有两个会影响运行的小问题,先修正再实现需求:

  • dayfirst="True"传了字符串类型的判断值,会触发pandas警告,要改成布尔值dayfirst=True
  • df.to_datetime('now')是错误的方法调用,to_datetime属于pandas顶层方法,不绑定DataFrame实例,直接运行会报错,正确写法是pd.to_datetime('now')

修正后的基础前置代码:

import pandas as pd
import numpy as np

# 保留原有的Creation列时间转换逻辑
df['Creation'] = pd.to_datetime(df["Creation"], dayfirst=True)
current_time = pd.to_datetime('now')

不计入周末的天数差计算

要求保持原有输出粒度(按自然天计数),但跳过周六、周日,两种可直接落地的实现方式:

大数据量场景:高效无循环计算

用numpy内置的busday_count方法,默认就是统计区间内周一到周五的工作日天数,自动排除周末,百万行级数据计算也不会卡顿:

# 统一把带时分秒的时间规整到当天零点,避免计数偏差
create_norm = df['Creation'].dt.normalize()
current_norm = current_time.normalize()

# 生成存储工作日天数的Difference列
df['Difference'] = np.busday_count(
    begindates=create_norm.values.astype('datetime64[D]'),
    enddates=current_norm.to_datetime64()
)

该方法的计数逻辑为“算头不算尾”,和日常自然日差的计数规则完全对齐,不需要额外调整数值。

需要自定义规则场景:灵活可扩展计算

用pandas自带的bdate_range生成工作日频率的时间轴,统计区间内的日期数量得到差值。后续如果需要额外排除法定节假日,只需要给函数传入自定义节假日列表即可,不用重写核心计算逻辑:

def get_workday_gap(start_dt, end_dt):
    # 生成两个日期之间的所有工作日
    workday_days = pd.bdate_range(
        start=start_dt.normalize(),
        end=end_dt.normalize()
    )
    # 去掉首尾重合的1天,对齐自然日差的计数粒度
    return len(workday_days) - 1

# 逐行应用计算差值
df['Difference'] = df['Creation'].apply(
    lambda row: get_workday_gap(row, current_time)
)

注意事项

  • 两种实现方式都自动跳过所有周六、周日,不会将周末天数计入Difference列
  • 统一对时间做零点规整后,不会因为创建时间带具体时分秒出现负数、计数少算的问题
  • 不需要手动逐行遍历判断日期是周几,计算效率远高于自定义循环逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 22:24:00