在 Pandas 中移动缺少日期的时间序列

use*_*836 5 python time-series shift pandas

我有一个时间序列,其中缺少一些条目,如下所示:

date     value
---------------
2000       5
2001      10
2003      8
2004      72
2005      12
2007      13
Run Code Online (Sandbox Code Playgroud)

我想为“previous_value”创建一个列。但我只希望它显示连续几年的值。所以我希望它看起来像这样:

date     value    previous_value
-------------------------------
2000       5        nan
2001      10         5
2003      8         nan
2004      72         8
2005      12        72
2007      13        nan
Run Code Online (Sandbox Code Playgroud)

但是,仅将 pandas shift 函数直接应用于列 'value' 将为 'time' = 2003 提供 'previous_value' = 10,而对于 'time' = 2007 则为 'previous_value' = 12。

在熊猫中处理这个问题的最优雅的方法是什么?(我不确定它是否像设置 'freq' 属性一样简单)。

Joh*_*hnE 8

In [588]: df = pd.DataFrame({ 'date':[2000,2001,2003,2004,2005,2007],
                              'value':[5,10,8,72,12,13] })

In [589]: df['previous_value'] = df.value.shift()[ df.date == df.date.shift() + 1 ]

In [590]: df
Out[590]: 
   date  value  previous_value
0  2000      5             NaN
1  2001     10               5
2  2003      8             NaN
3  2004     72               8
4  2005     12              72
5  2007     13             NaN
Run Code Online (Sandbox Code Playgroud)

另请参阅此处使用的时间序列方法resample()使用具有不均匀间隔数据的 shift()