【问题标题】:Shifting a date time index移动日期时间索引
【发布时间】:2018-01-05 01:00:59
【问题描述】:

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

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)

问题: index2 中的2018-01-04 实际上是2018-01-03 之后的下一个工作日,但它不在index 中,这意味着该日期的数据不可用。因此,代码将索引向前移动了一个工作日,但没有将一个业务和可用日期向前移动。

期望的结果:

In[157]:index2
Out[157]: DatetimeIndex(['2018-01-03', '2018-01-05', 'NaT', 'NaT'], dtype='datetime64[ns]', freq=None)

谢谢。

【问题讨论】:

  • 你的输入'2018-01-02', '2018-01-03', None, '2018-01-04', 另一个输入['2018-01-02', '2018 -01-03', 'NaT', '2018-01-05'],我们应该使用哪一个
  • 为什么你的第一个索引显示'2018-01-04',而你的第二个索引显示'2018-01-05'
  • 请定义什么是available?
  • 我会使用自定义函数,在循环中添加一个工作日并检查它是否可用并且仍然低于或等于最后一个可用日。
  • @Wen 对不起,修正了不一致的地方。

标签: python pandas


【解决方案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)

【讨论】:

  • 谢谢,温。你说的对。似乎我不是在寻找班次索引,而是班次位置。我相信,如果现在我想向后移动 n 行,我需要执行以下操作:Newindex= pd.Index([pd.NaT]* n ) Newindex= Newindex.append(index[: -n])。对吗?
  • @Saeed 是的,只需将 1 更改为 n
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-07
  • 2022-01-16
  • 2011-02-20
相关资源
最近更新 更多