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

如何计算Pandas中两列datetime.time的绝对时间差?

解决pandas中datetime.time类型列的绝对时间差计算问题

由于datetime.time对象不支持直接减法运算,我们需要先将其转换为可计算的数值或datetime对象,再计算时间差的绝对值并转换为小时数。以下是两种简洁的实现方法:

方法一:转换为datetime对象计算

将time类型绑定到同一日期,生成datetime对象后计算差值:

import pandas as pd
import datetime

# 构造原始DataFrame
x = [datetime.time(23,0),datetime.time(6,0),datetime.time(18,0),datetime.time(17,0)]
y = [datetime.time(22,0),datetime.time(9,0),datetime.time(9,0),datetime.time(23,0)]
df = pd.DataFrame({'time1':x,'time2':y})

# 绑定到当日日期,转换为datetime对象
base_date = datetime.date.today()
df['abs_diff'] = abs(
    df['time1'].apply(lambda t: datetime.datetime.combine(base_date, t)) -
    df['time2'].apply(lambda t: datetime.datetime.combine(base_date, t))
).dt.total_seconds() // 3600

方法二:转换为总秒数计算

直接将time转换为当日的总秒数,通过数值运算得到时间差:

import pandas as pd
import datetime

# 构造原始DataFrame
x = [datetime.time(23,0),datetime.time(6,0),datetime.time(18,0),datetime.time(17,0)]
y = [datetime.time(22,0),datetime.time(9,0),datetime.time(9,0),datetime.time(23,0)]
df = pd.DataFrame({'time1':x,'time2':y})

# 转换为总秒数并计算绝对小时差
df['abs_diff'] = abs(
    df['time1'].apply(lambda t: t.hour*3600 + t.minute*60 + t.second) -
    df['time2'].apply(lambda t: t.hour*3600 + t.minute*60 + t.second)
) // 3600

两种方法执行后,df['abs_diff']都会得到期望结果:[1, 3, 9, 6]

补充:处理跨天最小时间差

如果需要计算一天内的最小时间差(例如23:00到次日02:00取3小时而非21小时),可以在计算后添加逻辑:

df['abs_diff'] = df['abs_diff'].apply(lambda h: h if h <= 12 else 24 - h)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:50:43