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

pandas计算两个hh:mm:ss格式时间列的百分比变化实现方案

实现方案

首先将字符串格式的时间转为可计算的秒数数值,同时处理0值避免除以0报错,完整代码如下:

import pandas as pd
import numpy as np

# 初始化测试数据
data = {'Name':['Si','Ov','Sp','Sa','An'],
        'Time1':['02:00:00', '03:02:00', '04:00:30','01:02:30','0'],
        'Time2':['03:00:00', '0', '05:00:30','02:02:30','02:00:00']}
df = pd.DataFrame(data)

# 时间字符串转总秒数函数
def time_to_sec(time_str):
    return pd.to_timedelta(time_str).total_seconds()

# 两列都转为数值型秒数
df['Time1_sec'] = df['Time1'].apply(time_to_sec)
df['Time2_sec'] = df['Time2'].apply(time_to_sec)

# 计算Time3,自动将Time2为0的行结果设为NaN避免报错
df['Time3'] = (df['Time1_sec'] - df['Time2_sec']) / df['Time2_sec'].replace(0, np.nan)

# 可选:转为百分比格式
# df['Time3'] = df['Time3'].apply(lambda x: f'{x:.2%}' if pd.notna(x) else '无效值')

print(df)

运行结果说明

最终得到的Time3列计算结果如下:

序号NameTime1Time2Time3
0Si02:00:0003:00:00-0.333333
1Ov03:02:000NaN
2Sp04:00:3005:00:30-0.2
3Sa01:02:3002:02:30-0.495868
4An002:00:00-1

注意事项

  • Time2为0或空的行计算结果默认返回NaN,不会触发除数为0的报错
  • 如果需要替换NaN为自定义标识,可新增代码df['Time3'] = df['Time3'].fillna('无效值')
  • 如需百分比格式,放开代码中注释的格式转换行即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:06:02