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

基于工作日差值(含周末节假日)过滤Pandas DataFrame行

解决方案

步骤1:确保日期字段为datetime类型

如果你的DATE1和DATE2还不是datetime格式,先完成转换:

import pandas as pd

df['DATE1'] = pd.to_datetime(df['DATE1'])
df['DATE2'] = pd.to_datetime(df['DATE2'])

步骤2:定义节假日列表

指定需要排除的节假日:

# 加入题目要求的2023年10月17日,可按需添加其他节假日
holidays = pd.to_datetime(['2023-10-17'])

步骤3:批量计算工作日差值

用pd.busday_count批量处理每行的日期对,同时处理DATE1晚于DATE2的情况:

# 计算每行的工作日差值(取绝对值保证结果为正)
df['workday_diff'] = df.apply(
    lambda row: pd.busday_count(
        min(row['DATE1'], row['DATE2']),
        max(row['DATE1'], row['DATE2']),
        holidays=holidays
    ),
    axis=1
)

注意:pd.busday_count是左闭右开逻辑,比如从周一到周三(无节假日),结果为2(仅统计周二、周三)。如果需要包含起始/结束日期,可在结果基础上加1。

步骤4:过滤并拆分DataFrame

提取符合条件的行到新表,同时从原表移除这些行:

# 筛选出工作日差超过2天的行
filtered_df = df[df['workday_diff'] > 2].copy()
# 原表保留剩余行
df = df[~(df['workday_diff'] > 2)].copy()

# 可选:删除临时计算的差值列
filtered_df.drop('workday_diff', axis=1, inplace=True)
df.drop('workday_diff', axis=1, inplace=True)

补充说明

  • 若你的数据中DATE1始终早于或等于DATE2,可以去掉min和max,直接用row['DATE1'], row['DATE2']计算。
  • 需要新增节假日时,直接在holidays列表中补充日期字符串即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 15:13:19