无频率地移动时间序列?

Sae*_*eed 5 python pandas

我有一个时间序列,其指数如下所示:

In [671]: indices
Out[671]: 

DatetimeIndex(['2000-12-29', '2001-02-20', '2001-03-26', '2001-04-12',
               '2001-04-24', '2001-07-05', '2001-08-15', '2001-09-10',
               '2001-09-18', '2001-10-02', '2001-10-11', '2001-10-30',
               '2001-12-13', '2002-03-07', '2002-06-13', '2002-09-12',
               '2002-12-12', '2003-03-13', '2003-06-12', '2013-02-19',
               '2013-05-28', '2013-09-03', '2014-01-21', '2014-02-18',
               '2014-05-27', '2014-07-07', '2014-09-02', '2015-01-20',
               '2015-02-17', '2015-05-26', '2015-07-06', '2016-05-31',
               '2016-07-05', '2016-09-06', '2016-10-04', '2017-01-17',
               '2017-02-21', '2017-05-30', '2017-09-05'],
              dtype='datetime64[ns]', name='date', freq=None)
Run Code Online (Sandbox Code Playgroud)

由于频率不规则,我无法分配频率。

我的目标是获得一组移动 2 行的新索引(不是 2 个日历日期之后,而是数据中的两个日期之后)。

我尝试:

   indices2= indices.shift(2)
Run Code Online (Sandbox Code Playgroud)

但它说:

ValueError: Cannot shift with no freq
Run Code Online (Sandbox Code Playgroud)

我想要的输出看起来像:

In [671]: indices2
Out[671]: 

    DatetimeIndex(['2000-02-20', '2001-03-26', '2001-04-12', ...., '2017-09-05'],
Run Code Online (Sandbox Code Playgroud)

cs9*_*s95 8

如果您pd.Series先将其加载到对象中,然后 shift-

pd.Series(i).shift(-1).head()

0   2001-02-20
1   2001-03-26
2   2001-04-12
3   2001-04-24
4   2001-07-05
Name: date, dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)

实际结果包含 NaN,您可以使用dropna.

pd.DatetimeIndex(pd.Series(i).shift(-1).dropna())

DatetimeIndex(['2001-02-20', '2001-03-26', '2001-04-12', '2001-04-24',
               '2001-07-05', '2001-08-15', '2001-09-10', '2001-09-18',
               '2001-10-02', '2001-10-11', '2001-10-30', '2001-12-13',
               '2002-03-07', '2002-06-13', '2002-09-12', '2002-12-12',
               '2003-03-13', '2003-06-12', '2013-02-19', '2013-05-28',
               '2013-09-03', '2014-01-21', '2014-02-18', '2014-05-27',
               '2014-07-07', '2014-09-02', '2015-01-20', '2015-02-17',
               '2015-05-26', '2015-07-06', '2016-05-31', '2016-07-05',
               '2016-09-06', '2016-10-04', '2017-01-17', '2017-02-21',
               '2017-05-30', '2017-09-05'],
              dtype='datetime64[ns]', name='date', freq=None)
Run Code Online (Sandbox Code Playgroud)