使用带有不均匀间隔数据的shift()

时间:2014-08-19 16:11:01

标签: python pandas

希望这个例子说明一切。我想创建' lagval'如果缺少上一年,则需要使用shift(),但需要它为nan。

df = DataFrame( { 'yr' : [2007,2008,2009,2011,2012],
                  'val': np.random.randn(5) } )

期望输出(滞后):

In [1118]: df
Out[1118]: 
        val    yr    lagval
0 -0.978139  2007       NaN
1  0.117912  2008 -0.978139
2 -1.031884  2009  0.117912
3  0.606856  2011       NaN
4 -0.200864  2012  0.606856

我有一个很好的解决方案(发布作为答案),但我正在寻找替代方案。我花了一些时间查看所有时间序列函数,但这看起来有点过分。看起来我最终会将年份转换为真正的时间戳,重新取样,转移,然后删除缺失的值。但也许有一种更简单的方法?

1 个答案:

答案 0 :(得分:2)

对于它的价值,这里是一个时间序列解决方案,显然需要更多的代码。

df = df.set_index(df['yr'].apply(lambda x: datetime.datetime(x, 1, 1)))
df = df.resample('A').mean()

df['lagval'] = df['val'].shift(1)
df = df[pd.notnull(df['yr'])]

我不熟悉Stata,但只是浏览文档,听起来tsset做了类似的事情(将数据符合指定的频率)?