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

如何用Pandas创建间隔周期性变化的自定义DatetimeIndex?

实现周期性增减天数的DatetimeIndex

当然可行,Pandas可以通过自定义增量逻辑轻松生成这种周期性变化的日期索引,以下是两种实现方法:

方法一:基于Numpy的高效实现(适合大量日期生成)

这种方法利用Numpy的向量运算快速生成增量序列,效率更高:

import pandas as pd
import numpy as np

# 定义基础参数
start_date = pd.to_datetime('2004-08-01')
total_dates = 11  # 对应示例中的11个日期

# 生成增量索引(共需要total_dates-1个增量)
increment_idx = np.arange(total_dates - 1)
# 标记需要增加35天的位置:索引%3 ==1时(对应示例中的第2、5、8次增量)
is_35days = increment_idx % 3 == 1
# 生成增量数组:满足标记的用35天,其余用28天
days_add = np.where(is_35days, 35, 28)

# 计算累计天数(开头插入0,对应起始日期)
cumulative_days = np.cumsum(np.insert(days_add, 0, 0))
# 生成DatetimeIndex
dt_index = pd.DatetimeIndex(start_date + pd.to_timedelta(cumulative_days, unit='D'))

# 验证结果
print(dt_index)

方法二:循环实现(逻辑直观,适合新手理解)

如果对向量运算不熟悉,用循环逐次生成日期更清晰:

import pandas as pd

start_date = pd.to_datetime('2004-08-01')
dt_list = [start_date]
current_date = start_date

# 生成10个后续日期(示例共11个日期)
for i in range(10):
    # 每第2、5、8次增量(对应i=1、4、7)增加35天,其余增加28天
    if i % 3 == 1:
        current_date += pd.Timedelta(days=35)
    else:
        current_date += pd.Timedelta(days=28)
    dt_list.append(current_date)

dt_index = pd.DatetimeIndex(dt_list)
print(dt_index)

两种方法生成的结果都和你给出的示例完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:30:57