如何滞后天数而不是行数-对于每个ID

时间:2019-04-02 13:06:23

标签: python pandas dataframe

我正在做一个分类问题,其中我试图预测第二天是否会给汽车加油。

数据包括日期,每辆车的ID,到目的地的距离

我想要的是一个滞后3天的变量,而不是每个car_ID 3行-因为这种情况是每天都不存在每个car_ID。因此,滞后应基于日期而不是行。

如果历史记录少于3天,则结果应为-1。

目前,我有这段代码,每行都要滞后3天

data['distance_to_destination'].groupby(data['car_ID']).shift(3).tolist()

但这只是滞后于行数而不是天数。

我要实现的是“ lag_dtd_3”列:

date    car_ID  distance_to_destination lag_dtd_3

01/01/2019  1   100 -1

01/01/2019  2   200 -1

02/01/2019  1   80  -1

02/01/2019  2   170 -1

02/01/2019  3   500 -1

03/01/2019  2   120 -1

05/01/2019  1   25  80

05/01/2019  2   75  170

06/01/2019  1   20  -1

06/01/2019  2   30  120

06/01/2019  3   120 -1

1 个答案:

答案 0 :(得分:0)

将信息滞后3天的一种解决方案是移动索引而不是移动索引。

pivot = data.pivot(columns='car_ID')
shifted = pivot.copy()
shifted.index = shifted.index + pd.DateOffset(days=3) # Here I lag the index instead of shifting

shifted.columns = shifted.columns.set_levels(['lag_dtd_3'], 0)
output = pd.concat([pivot, shifted], axis = 1).stack('car_ID').reset_index('car_ID')
output['lag_dtd_3'] = output['lag_dtd_3'].fillna(-1)
output = output.dropna()

输出:

    car_ID  distance_to_destination lag_dtd_3
date            
2019-01-01  1   100.0   -1.0
2019-01-01  2   200.0   -1.0
2019-01-02  1   80.0    -1.0
2019-01-02  2   170.0   -1.0
2019-01-02  3   500.0   -1.0
2019-01-03  2   120.0   -1.0
2019-01-05  1   25.0    80.0
2019-01-05  2   75.0    170.0
2019-01-06  1   20.0    -1.0
2019-01-06  2   30.0    120.0
2019-01-06  3   120.0   -1.0