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

如何用pandas date_range生成周期结束日期?

周期性交易日期生成解决方案

问题背景

使用pandas.date_range生成周期性交易日期时,默认输出是从起始日开始的周期锚点日期(比如freq='12M'会输出每个年度对应月份的月末):

import pandas as pd
from datetime import date

d1 = date(2023,11,1)
d2 = date(2026,5,1)
period_length = '12M'
pd.date_range(start=d1, end=d2, freq=period_length)

输出:

DatetimeIndex(['2023-11-30', '2024-11-30', '2025-11-30'], dtype='datetime64[ns]', freq='12M')

但实际需求是生成周期结束日,即第一个交易日期应为2024-10-31(从2023-11-1开始经过12个月周期的结束日),当前需手动将频率字符串转为显式时间差来调整起始日,希望找到更通用的实现方式。

可行解决方案

方法1:直接让date_range生成周期结束日

通过计算第一个周期结束日作为新起始点,再生成后续周期日期:

import pandas as pd
from datetime import date

d1 = date(2023,11,1)
d2 = date(2026,5,1)
period_length = '12M'

# 计算第一个周期结束日:起始日加完整周期后减1天
first_end_date = d1 + pd.tseries.frequencies.to_offset(period_length) - pd.DateOffset(days=1)
# 生成后续周期的结束日序列
result = pd.date_range(start=first_end_date, end=d2, freq=period_length)

输出:

DatetimeIndex(['2024-10-31', '2025-10-31'], dtype='datetime64[ns]', freq='12M')

方法2:在date_range和DateOffset中使用同一个频率字符串

利用pd.tseries.frequencies.to_offset()将频率字符串转为统一的偏移量对象,无需手动拆解频率参数:

import pandas as pd
from datetime import date

d1 = date(2023,11,1)
d2 = date(2026,5,1)
period_length = '12M'

# 将频率字符串转为可复用的偏移量对象
cycle_offset = pd.tseries.frequencies.to_offset(period_length)
# 用同一偏移量调整起始日
adjusted_start = d1 + cycle_offset - pd.DateOffset(days=1)
# 生成目标日期序列
result = pd.date_range(start=adjusted_start, end=d2, freq=period_length)

此方法支持灵活替换频率字符串(如'6M'、'3M'),无需修改偏移量的显式参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:05:20