请考虑此日期时间索引及其缺失日期。它没有任何频率(不规则的时间序列)。
index = pd.DatetimeIndex(pd.to_datetime(pd.Series([ '2018-01-02', '2018-01-03', None, '2018-01-05'])))
目标:将日期时间索引元素移至可用和业务 前进的一天。
我有什么:
index2 = index.shift(1, 'B')
或:
index2 = index + BDay(1)
结果:
In [156]:index
Out[156]: DatetimeIndex(['2018-01-02', '2018-01-03', 'NaT', '2018-01-05'], dtype='datetime64[ns]', freq=None)
In [157]:index2
Out[157]: DatetimeIndex(['2018-01-03', '2018-01-04', 'NaT', '2018-01-08'], dtype='datetime64[ns]', freq=None)
问题 2018-01-04
index2
实际上是2018-01-03
后的下一个工作日,但它不在index
,意味着数据不适用于该日期。因此,代码在一个工作日向前移动了索引,但没有一个业务和可用的前一天。
期望的结果:
In[157]:index2
Out[157]: DatetimeIndex(['2018-01-03', '2018-01-05', 'NaT', 'NaT'], dtype='datetime64[ns]', freq=None)
谢谢。
答案 0 :(得分:1)
这不是轮班日,我认为你正在寻找轮班职位
index = pd.DatetimeIndex(pd.to_datetime(pd.Series([ '2018-01-02', '2018-01-03', None, '2018-01-05'])))
Newindex=(index[1:].dropna())
Newindex.append(pd.Index([pd.NaT]*(len(index)-len(Newindex))))
Out[429]: DatetimeIndex(['2018-01-03', '2018-01-05', 'NaT', 'NaT'], dtype='datetime64[ns]', freq=None)