You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:03:58