我正在做一个分类问题,其中我试图预测第二天是否会给汽车加油。
数据包括日期,每辆车的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
答案 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