如何在Pandas.tseries AbstractHolidayCalendar中添加日期范围假期规则?
用Pandas实现连续多日假期的自定义日历规则
完全可以用一行规则实现连续21天的假期,核心是利用Holiday类的offset参数支持传入偏移量序列,不用逐个编写日期规则。
修改后的日历类示例
假设你的连续假期基于某个固定基准日期(比如每年1月20日作为假期起始),直接通过Day(range(0,21))生成0到20天的连续偏移,就能覆盖21天假期:
import pandas as pd from pandas.tseries.holiday import AbstractHolidayCalendar, Holiday, Easter from pandas.tseries.offsets import Day class myCalendar(AbstractHolidayCalendar): rules = [ Holiday('Off-day during Easter', month=1, day=1, offset=[Easter(), Day(-2)]), Holiday('Christmas Day', month=12, day=25), # 一行实现21天连续假期:以每年1月20日为起始,偏移0到20天 Holiday('21-Day Continuous Holiday', month=1, day=20, offset=Day(range(0,21))) ]
验证效果
用你原有的offset_date函数测试,比如从1月15日开始偏移30个工作日,会自动跳过这21天假期:
def offset_date(start, offset): return start + pd.offsets.CustomBusinessDay(n=offset, calendar=myCalendar()) # 测试:2025年1月15日开始偏移30个工作日 start_date = pd.Timestamp('2025-01-15') result_date = offset_date(start_date, 30) print(f"偏移后的日期:{result_date}")
关键说明
Day(range(0,21))会生成从0到20的21个偏移量,对应基准日期(1月20日)开始的连续21天(1月20日到2月9日)- 如果你的连续假期是基于动态日期(比如复活节后的某一天开始),可以把基准日期和偏移结合,比如
offset=[Easter()] + [Day(i) for i in range(1,22)]
内容的提问来源于stack exchange,提问作者Doons
相关产品推荐
相关产品推荐

