如何用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
相关产品推荐
相关产品推荐

