如何用pandas生成适配USFederalHolidayCalendar的季度有效交易日序列
问题原因
你之前的写法失效是因为指定了freq='MS'参数,该参数会覆盖pd.bdate_range默认的工作日频率,最终返回的是普通月度首日序列,完全没有应用交易日校验和美国联邦假期排除规则,按3个月间隔切片后自然会出现周末/假期日期。
解决方案
可以通过CustomBusinessDay绑定美国联邦假期规则,再对齐季度起始日期即可:
首先导入依赖模块:
import pandas as pd from pandas.tseries.holiday import USFederalHolidayCalendar from pandas.tseries.offsets import CustomBusinessDay
核心实现代码:
start = '2015-06-01' end = '2019-06-01' # 定义绑定美国联邦假期规则的自定义交易日 us_trading_day = CustomBusinessDay(calendar=USFederalHolidayCalendar()) # 生成自然季度首日基础序列,可根据你的季度对齐要求修改freq参数,比如QS-JUN代表季度从6月起始 quarter_candidates = pd.date_range(start=start, end=end, freq='QS') # 对齐到有效交易日:如果季度首日为周末/假期,默认向后取第一个符合规则的交易日 valid_quarter_dates = pd.DatetimeIndex([date + 0 * us_trading_day for date in quarter_candidates])
可选调整
如果你希望非交易日的季度首日向前取最近的有效交易日,只需要把对齐逻辑替换为date - 0 * us_trading_day即可。
内容的提问来源于stack exchange,提问作者laszlopanaflex
相关产品推荐
相关产品推荐

