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

基于年、月列创建含当月第7个工作日的新列

生成对应年月的第7个工作日列解决方案

基础实现(仅排除周末)

不需要额外合并年月为辅助列,直接通过apply结合pandas.bdate_range即可实现:

  1. 导入依赖库
import pandas as pd
  1. 定义计算第7个工作日的函数
def get_seventh_business_day(year, month):
    # 构造当月第一天的时间戳
    month_start = pd.Timestamp(year=year, month=month, day=1)
    # 生成当月前7个工作日,取最后一个即为第7个工作日
    seventh_bd = pd.bdate_range(start=month_start, periods=7)[-1]
    # 转换为YYYY-MM-DD格式字符串
    return seventh_bd.strftime('%Y-%m-%d')
  1. 应用到DataFrame生成新列
df['PredictionDate'] = df.apply(lambda row: get_seventh_business_day(row['YearOfSRC'], row['MonthNumberOfSRC']), axis=1)

进阶实现(排除周末+美国节假日)

针对月初节假日(如新年、独立日)导致的偏移问题,可结合美国联邦节假日日历进行调整:

  1. 导入额外依赖
from pandas.tseries.holiday import USFederalHolidayCalendar
  1. 定义包含节假日处理的函数
def get_seventh_business_day_with_holidays(year, month):
    month_start = pd.Timestamp(year=year, month=month, day=1)
    # 获取当月及次月月初的美国联邦节假日(覆盖整个目标月份)
    holiday_cal = USFederalHolidayCalendar()
    holidays = holiday_cal.holidays(start=month_start, end=month_start + pd.DateOffset(months=1))
    # 生成排除周末和节假日的工作日序列,取第7个
    seventh_bd = pd.bdate_range(start=month_start, periods=7, holidays=holidays, freq='C')[0]
    return seventh_bd.strftime('%Y-%m-%d')
  1. 应用到DataFrame
df['PredictionDate'] = df.apply(lambda row: get_seventh_business_day_with_holidays(row['YearOfSRC'], row['MonthNumberOfSRC']), axis=1)

说明

  • bdate_range默认生成仅排除周末的工作日序列;指定freq='C'并传入holidays参数后,会同时排除自定义节假日。
  • 无需使用groupby,因为每个行的年月是独立的,逐行计算即可满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:15:05