Python 如何计算自上次事件==1起的天数?
我正在做一个分类问题,我试图预测一辆汽车是否会在第二天加油 数据由日期、每辆车的ID和一个虚拟变量组成,该变量指示该车是否在该特定日期加油 我想实现的是“加油后的日子”专栏。这应计算为自上次加油==1起的天数,显然,必须针对每辆车单独计算。如果之前没有加油==1的实例,则该值应等于-1 所需的输出应如下所示:Python 如何计算自上次事件==1起的天数?,python,pandas,loops,Python,Pandas,Loops,我正在做一个分类问题,我试图预测一辆汽车是否会在第二天加油 数据由日期、每辆车的ID和一个虚拟变量组成,该变量指示该车是否在该特定日期加油 我想实现的是“加油后的日子”专栏。这应计算为自上次加油==1起的天数,显然,必须针对每辆车单独计算。如果之前没有加油==1的实例,则该值应等于-1 所需的输出应如下所示: date car_id refuelled days_since_refuelled 01-01-2019 1 0 -1 01-01-2019
date car_id refuelled days_since_refuelled
01-01-2019 1 0 -1
01-01-2019 2 1 -1
01-01-2019 3 1 -1
06-01-2019 1 0 -1
06-01-2019 2 0 5
06-01-2019 3 0 5
09-01-2019 1 1 -1
09-01-2019 2 0 8
09-01-2019 3 0 8
14-01-2019 1 0 5
14-01-2019 2 1 13
14-01-2019 3 0 13
将
1
的行转换为NaN
s by,然后每组转换为ffill
,然后减去date
列by,最后一次转换timedelta by,并将缺少的值替换为:
你能展示一下你对此问题的尝试或想法吗?我正在寻找一个函数/循环来回答这个问题:“对于这辆车,它加油多少天了?”。我希望这是有道理的。
#convert to datetimes
df['date'] = pd.to_datetime(df['date'], dayfirst=True)
df['days_since_refuelled'] = df['date'].where(df['refuelled'].eq(1))
df['days_since_refuelled'] = (df['date'].sub(df.groupby('car_id')['days_since_refuelled']
.apply(lambda x: x.shift().ffill())
)
.dt.days
.fillna(-1)
.astype(int))
print (df)
date car_id refuelled days_since_refulled days_since_refuelled
0 2009-01-01 1 0 -1 -1
1 2019-01-01 2 1 -1 -1
2 2019-01-01 3 1 -1 -1
3 2019-01-06 1 0 -1 -1
4 2019-01-06 2 0 5 5
5 2019-01-06 3 0 5 5
6 2019-01-09 1 1 -1 -1
7 2019-01-09 2 0 8 8
8 2019-01-09 3 0 8 8
9 2019-01-14 1 0 5 5
10 2019-01-14 2 1 13 13
11 2019-01-14 3 0 13 13