Python/Pandas如何计算支持自定义假期的季度末工作日
带自定义假期过滤的季度末工作日计算实现
核心思路
利用pandas自带的日期偏移能力,先定位默认季度末工作日,再基于自定义假期规则调整,避免手动处理季度边界、周末判断等复杂逻辑。
依赖导入
import pandas as pd from pandas.tseries.offsets import BQuarterEnd, CustomBusinessDay
函数实现
def get_quarter_end_workday(input_date, custom_holidays=None): # 输入日期格式统一转换 input_dt = pd.to_datetime(input_date) # 定位当前日期对应的季度末默认工作日(自动排除周六日,避免输入日期为季度末时跳到下一季度) raw_quarter_end = BQuarterEnd().rollforward(input_dt) # 无自定义假期直接返回结果 if not custom_holidays: return raw_quarter_end.date() # 自定义假期格式统一转换 formatted_holidays = [pd.to_datetime(holiday) for holiday in custom_holidays] # 定义自定义工作日规则:排除周六日+自定义假期 custom_workday = CustomBusinessDay(holidays=formatted_holidays) # 若原始季度末为假期,自动回滚到最近的符合规则的工作日 adjusted_quarter_end = custom_workday.rollback(raw_quarter_end) return adjusted_quarter_end.date()
测试验证(对应示例场景)
# 传入示例参数 input_date = "2020-11-20" custom_holidays = ["2020-12-31"] # 调用函数 result = get_quarter_end_workday(input_date, custom_holidays) print(result) # 输出结果:2020-12-30
注意事项
- 输入的日期、自定义假期支持字符串、datetime对象等多种格式,函数内部会自动转换
rollback方法会自动处理周末和假期的回滚逻辑,无需手动写循环逐天判断
内容的提问来源于stack exchange,提问作者Paras Gupta
相关产品推荐
相关产品推荐

