pandas中如何重复DatetimeIndex以生成多次重复的日期范围
重复日期序列的正确实现方法
方法1:使用numpy.tile(最简洁)
np.tile会将整个序列作为整体重复,完全匹配你的需求,实现代码如下:
import pandas as pd import numpy as np # 生成原始日期序列 rng = pd.date_range('1/1/2011', periods=3, freq='W') # 重复整个序列3次 repeated_rng = np.tile(rng, 3) # 如果需要保留DatetimeIndex类型,可额外做类型转换 repeated_rng = pd.DatetimeIndex(repeated_rng)
直接遍历打印repeated_rng即可得到你预期的输出结果。
方法2:使用pandas.concat(纯pandas实现)
如果你不想引入numpy依赖,也可以调整concat的参数实现:
# 将日期序列转为Series后按行拼接,ignore_index用来重置连续索引 repeated_rng = pd.concat([pd.Series(rng)] * 3, ignore_index=True)
原有方法问题说明
- 你使用
pd.concat([rng] * 3, axis=1)失效的原因:axis=1是按列横向拼接,且pd.concat的操作对象需要是Series或DataFrame类型,直接传入DatetimeIndex不会得到纵向拼接的结果。 - 你使用
np.repeat(rng,3)不符合需求的原因:np.repeat是对序列中的每个元素单独重复指定次数,最终会得到每个日期连续出现3次的结果,和整体重复序列的逻辑不符。
内容的提问来源于stack exchange,提问作者Jonathan Hay
相关产品推荐
相关产品推荐

