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
相关产品推荐
相关产品推荐

