我希望能够根据乘客上下车的时间差计算数据框中每位乘客的旅行时间。以下是数据框:
如您所见,乘客B在同一天进行了两次不同的旅行,我想知道每次旅行持续的时间。我已经尝试了以下代码,它似乎可以工作,但速度非常慢(我认为这是由于我的df中有大量行)。
my_df = pd.DataFrame({
'id': ['a', 'b', 'b', 'b', 'b', 'b', 'c','d'],
'date': ['2020/02/03', '2020/04/05', '2020/04/05', '2020/04/05','2020/04/06', '2020/04/06', '2020/12/15', '2020/06/23'],
'arriving_time': ['14:36:06', '08:52:02', '08:53:02', '08:55:24', '18:58:03', '19:03:05', '17:04:28', '21:31:23'],
'leaving_time': ['14:40:05', '08:52:41', '08:54:33', '08:57:14', '19:01:07', '19:04:08', '17:09:48', '21:50:12']
})
print(my_df)
output:
id date arriving_time leaving_time
0 a 2020/02/03 14:36:06 14:40:05
1 b 2020/04/05 08:52:02 08:52:41
2 b 2020/04/05 08:53:02 08:54:33
3 b 2020/04/05 08:55:24 08:57:14
4 b 2020/04/06 18:58:03 19:01:07
5 b 2020/04/06 19:03:05 19:04:08
6 c 2020/12/15 17:04:28 17:09:48
7 d 2020/06/23 21:31:23 21:50:12
然而,有两个问题(我自己无法解决):
- 乘客通过手机信号检测到,但信号经常不稳定,这就是为什么对于同一个人,我们可能有许多行(例如上面数据集中的乘客 b)。"arriving_time" 是检测到信号的时间,"leaving_time" 是信号丢失的时间。
- 要计算旅行时间,我需要为每个唯一的 ID 和每次旅行减去最近到达时间和最近离开时间之间的时间。
这是我想要获得的结果。
id date arriving_time leaving_time travelTime
0 a 2020/02/03 14:36:06 14:40:05 00:03:59
1 b 2020/04/05 08:52:02 08:52:41 00:05:12
2 b 2020/04/05 08:53:02 08:54:33 00:05:12
3 b 2020/04/05 08:55:24 08:57:14 00:05:12
4 b 2020/04/06 18:58:03 19:01:07 00:06:05
5 b 2020/04/06 19:03:05 19:04:08 00:06:05
6 c 2020/12/15 17:04:28 17:09:48 00:05:20
7 d 2020/06/23 21:31:23 21:50:12 00:18:49
如您所见,乘客B在同一天进行了两次不同的旅行,我想知道每次旅行持续的时间。我已经尝试了以下代码,它似乎可以工作,但速度非常慢(我认为这是由于我的df中有大量行)。
for user_id in set(my_df.id):
for day in set(my_df.loc[my_df.id == user_id, 'date']):
my_df.loc[(my_df.id == user_id) & (my_df.date == day), 'travelTime'] = max(my_df.loc[(my_df.id == user_id) & (my_df.date == day), 'leaving_time'].apply(pd.to_datetime)) - min(my_df.loc[(my_df.id == user_id) & (my_df.date == day), 'arriving_time'].apply(pd.to_datetime))