在不均匀间隔数据中使用shift()

3 投票
1 回答
948 浏览
提问于 2025-04-18 17:49

希望这个例子能让你明白我的意思。我想用shift()函数来创建一个叫'lagval'的东西,但如果前一年的数据缺失,它需要显示为nan。

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

我想要的结果(lagval)是这样的:

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 个回答

3

这段话的意思是,虽然这个时间序列的解决方案代码比较多,但还是值得一提。

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这个命令好像也有类似的功能(就是把数据调整到指定的频率)?

撰写回答