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

如何用Pandas计算公交预计与实际停靠时间的秒级差值并正确显示正负数值

解决Pandas时间差显示异常及获取正负秒数格式的问题

我来帮你搞定这个问题!先给你拆解下为什么会出现你看到的奇怪结果:

  • Pandas的Timedelta类型处理负时间差时,会用负数天数+正数时分秒的形式来表示,比如-1 days +23:59:16其实等价于-44秒(因为24小时总秒数86400减去86356,正好是44,所以实际差值是-44秒)。
  • 而.dt.seconds方法只会提取Timedelta里时间部分的秒数,完全不考虑天数的正负,所以第二行得到的86356只是23:59:16对应的秒数,并不是你要的真实时间差。

要得到你想要的+9和-44格式,核心是用**dt.total_seconds()方法,它会返回时间差的总秒数(带正负符号)**,再配合简单的字符串格式化就能实现需求。

完整解决方案代码

import pandas as pd

# 创建原始数据
d = { 
    'time_A': ['2022-08-30 06:21:00', '2022-08-30 16:41:00'], 
    'time_B': ['2022-08-30 06:21:09', '2022-08-30 16:40:16'], 
}
# 构建DataFrame并转换时间类型
my_df = pd.DataFrame(d)
my_df['time_A'] = pd.to_datetime(my_df['time_A'])
my_df['time_B'] = pd.to_datetime(my_df['time_B'])

# 计算带正负的总秒数,并格式化为目标字符串
my_df['difference'] = (my_df['time_B'] - my_df['time_A']).dt.total_seconds().apply(
    lambda x: f"+{int(x)}" if x > 0 else f"{int(x)}"
)

最终执行结果

time_Atime_Bdifference
02022-08-30 06:21:002022-08-30 06:21:09+9
12022-08-30 16:41:002022-08-30 16:40:16-44

关键细节说明

  • dt.total_seconds():直接返回时间差的总秒数,正数代表time_B晚于time_A,负数代表time_B早于time_A,完美匹配你的业务逻辑。
  • apply(lambda x: ...):把浮点型的秒数转为整数后,根据正负值添加+号(正数)或保留负号(负数),精准实现你要的显示格式。

内容的提问来源于stack exchange,提问作者Vincent Tep

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 18:58:11