python - 对间隔不均匀的数据使用 shift()

标签 python pandas

希望这个例子不言自明。我想用 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/

相关文章:

python - 使用来自多个表的随机行的 SELECT UNION 查询

python - os.rename()错误不存在这样的文件或文件夹

python - 如果列表,Pandas 将列值拆分为新列

python - 查找以列表形式存在的列元素的数据帧索引的最快方法

python - 添加一个 DataFrame 列以基于另一个列实例进行分组

python - dask 数据框中的 df.groupby(...).apply(...) 函数

python - 获取字符串正则表达式Python中括号中的两个数字

python - 加载模块时出错./exp.so undefined symbol

python - Sqlite Server 版本不同

sql-server - Pandas read_sql 在读取时更改大量 ID