转移日期时间索引

时间:2018-01-04 02:03:36

标签: python pandas

请考虑此日期时间索引及其缺失日期。它没有任何频率(不规则的时间序列)。

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)

谢谢。

1 个答案:

答案 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)