首页 > 解决方案 > Python:创建多个元素的滞后(t-1)数据结构

问题描述

我在为我的数据创建时间滞后列时遇到问题。当我对仅具有一种元素的数据框执行此操作时,它可以正常工作,但是当我有不同的元素时,它就不能正常工作。例如,我的数据集如下所示:

在此处输入图像描述

使用建议的命令时:

data1['lag_t'] = data1['total_tax'].shift(1)

我得到这样的结果:

在此处输入图像描述

如您所见,它只是将所有“total_tax”值替换为一行。但是,我需要为每个id_inf(作为单独的项目)做这个滞后。

我的数据集真的很大,所以我需要找到解决这个问题的方法。所以我可以得到这样的表:

在此处输入图像描述

标签: pythonpandasdataframeshift

解决方案


您可以groupby在索引和shift

# an example with random data.
data1 = pd.DataFrame({'id': [9,9,9,54,54,54],'total_tax':[5,6,7,1,2,3]}).set_index('id')

data1['lag_t'] = data1.groupby(level=0)['total_tax'].apply(lambda x: x.shift())

print (data1)

    tax  lag_t
id            
9     5    NaN
9     6    5.0
9     7    6.0
54    1    NaN
54    2    1.0
54    3    2.0

推荐阅读