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

Python计算DataFrame两日期列差值且仅排除周日的实现方法

实现排除周日的日期差计算方法

首先导入依赖库:

import pandas as pd
import numpy as np

核心实现代码

可直接复用你已有的日期类型转换逻辑,后续按如下方式计算:

# 已有代码,日期类型转换
df["First_date"] = df['First_date'].astype('datetime64[ns]')
df["Second_date"] = df['Second_date'].astype('datetime64[ns]')

# 计算原始总天数
df['total_days'] = (df['First_date'] - df['Second_date']).dt.days

# 计算起始日期(Second_date)的周序:weekday返回0=周一,6=周日
s_weekday = df['Second_date'].dt.weekday
# 计算第一个周日距离起始日期的间隔天数
first_sun_offset = (6 - s_weekday) % 7

# 统计区间内的周日总数
df['sundays_count'] = np.where(
    first_sun_offset > df['total_days'],
    0,
    (df['total_days'] - first_sun_offset) // 7 + 1
)

# 最终结果=总天数减去周日数量
df['expected_outcome'] = df['total_days'] - df['sundays_count']

以上是向量化计算方案,适合百万级以上的大数据量场景,性能远高于逐行遍历。如果数据量很小,也可以用更直观的逐行统计写法:

df['expected_outcome'] = df.apply(
    lambda row: row['total_days'] - sum(
        1 for d in pd.date_range(row['Second_date']+pd.Timedelta(days=1), row['First_date']) 
        if d.weekday() == 6
    ), axis=1
)

效果验证

对应你提供的测试样例,计算结果完全匹配预期:

First_dateSecond_datetotal_dayssundays_countexpected_outcome
2021-09-182021-09-17101
2021-09-222021-09-17514
2021-09-272021-09-171028

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:24:06