使用Pandas计算Roadtrip行程耗时分钟差(字符串时间)
解决跨天行程时间计算问题
嘿,这个问题我熟,处理跨天的时间差确实得注意细节,我给你一步步来实现:
步骤1:准备环境与示例数据
首先导入Pandas并构造你提供的示例DataFrame:
import pandas as pd # 构造示例行程数据 data = { 'Leave': ['18:26', '12:18', '06:23', '15:52'], 'Arrive': ['21:16', '14:19', '13:02', '03:14'] } Roadtrip = pd.DataFrame(data)
步骤2:将字符串时间转换为datetime类型
我们需要把Leave和Arrive的字符串时间转成Pandas的datetime对象,这样才能进行时间差计算:
# 按"时:分"格式解析字符串,转换为datetime类型 Roadtrip['Leave_dt'] = pd.to_datetime(Roadtrip['Leave'], format='%H:%M') Roadtrip['Arrive_dt'] = pd.to_datetime(Roadtrip['Arrive'], format='%H:%M')
这里默认日期会取当前系统日期,但我们只关心时间差,所以日期不影响最终结果。
步骤3:处理跨天场景并计算行程时间
核心逻辑是:如果到达时间早于出发时间,说明行程跨天了,需要给到达时间加1天,再计算时间差并转换为分钟数:
# 处理跨天情况:到达时间早于出发时间则加1天 Roadtrip['Arrive_dt'] = Roadtrip.apply( lambda row: row['Arrive_dt'] + pd.Timedelta(days=1) if row['Arrive_dt'] < row['Leave_dt'] else row['Arrive_dt'], axis=1 ) # 计算总耗时(转换为分钟数) Roadtrip['TravelTime(in minutes)'] = (Roadtrip['Arrive_dt'] - Roadtrip['Leave_dt']).dt.total_seconds() // 60 # 清理中间生成的辅助列(可选) Roadtrip = Roadtrip.drop(['Leave_dt', 'Arrive_dt'], axis=1)
最终结果
运行上述代码后,你会得到如下结果:
Leave Arrive TravelTime(in minutes) 0 18:26 21:16 170.0 1 12:18 14:19 121.0 2 06:23 13:02 399.0 3 15:52 03:14 682.0
关键细节说明
- 用
format='%H:%M'精准解析时间字符串,避免Pandas自动解析时出现异常。 - 使用
pd.Timedelta(days=1)来处理跨天,逻辑清晰且不易出错。 - 用
dt.total_seconds()计算总秒数再转分钟,比直接取dt.minutes更准确(后者只会取时间差的分钟部分,忽略小时)。
内容的提问来源于stack exchange,提问作者beluga217
相关产品推荐
相关产品推荐

