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

Pandas中如何仅对两个datetime列的时间分量做减法运算

需求说明

对pandas中两个datetime类型列做时间差计算时,完全忽略年月日部分的差异,仅对时分秒分量做减法,差值允许为负,结果存入新增的ts_delta列。

示例输入DataFrame:

import pandas as pd
df = pd.DataFrame({
    'ts1': pd.to_datetime([
        '2018-07-25 11:14:00',
        '2018-08-26 11:15:00',
        '2018-07-29 11:17:00'
    ]),
    'ts2': pd.to_datetime([
        '2018-07-27 12:14:00',
        '2018-09-24 10:15:00',
        '2018-07-22 11:00:00'
    ])
})

期望输出效果:

ts1                 ts2  ts_delta
0 2018-07-25 11:14:00 2018-07-27 12:14:00   1:00:00
1 2018-08-26 11:15:00 2018-09-24 10:15:00  -1:00:00
2 2018-07-29 11:17:00 2018-07-22 11:00:00  -0:17:00
单行实现代码
df['ts_delta'] = (df['ts2'] - df['ts2'].dt.normalize()) - (df['ts1'] - df['ts1'].dt.normalize())
逻辑说明
  • dt.normalize()方法会将datetime值的时分秒部分重置为0,对齐到当日零点
  • 原时间减去当日零点的时间,即可得到仅由时分秒换算得到的时长(Timedelta类型),完全剥离日期的影响
  • 两列分别提取纯时间对应的时长后直接做差,即可得到符合要求的时间差结果,属于pandas原生向量化运算,性能远高于apply循环写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:36:25