希望这个例子不言自明。我想用 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
我对此有一个不错的解决方案(作为答案发布),但我正在寻找替代方案。我花了一些时间查看所有时间序列函数,但这似乎有点矫枉过正。似乎我最终会将年份转换为真正的时间戳、重新采样、移动,然后删除缺失值。但也许有更简单的方法?
最佳答案
就其值(value)而言,这是一个时间序列解决方案,显然需要更多代码。
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 做了类似的事情(将数据符合指定的频率)?
关于python - 对间隔不均匀的数据使用 shift(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25388189/