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

Pandas如何将timedelta列转换为小时并按区间比较赋值

报错核心原因

两个datetime类型列做差得到的Duration是timedelta(时间差/时间长度)类型,不是具体时间点类型。pd.to_datetime()仅用于解析时间点(如日期字符串、时间戳),无法直接转换时间长度类型,强行调用就会触发报错。

实现方法

不需要转datetime类型,直接将timedelta换算为小时数值,再做条件判断即可。

  • 核心注意点:判断顺序必须从阈值最大到最小,若从小到大判断会出现逻辑错误,比如>1的区间会提前覆盖>8、>24的情况。

完整可运行代码:

import pandas as pd
import numpy as np

# 构造数据集并转datetime格式
df = pd.DataFrame({'Start': {0: '2022-05-01 14:32:07',
  1: '2022-05-01 13:09:20',
  2: '2022-05-01 17:19:12',
  3: '2022-05-01 16:12:03',
  4: '2022-05-01 13:24:42',
  5: '2022-05-01 02:24:17',
  6: '2022-05-01 12:53:35',
  7: '2022-05-01 09:57:34',
  8: '2022-05-01 17:24:29',
  9: '2022-05-01 09:58:15'},
 'End': {0: '2022-05-01 15:39:51',
  1: '2022-05-02 13:10:56',
  2: '2022-05-01 21:29:04',
  3: '2022-05-01 23:56:27',
  4: '2022-05-03 13:28:05',
  5: '2022-05-01 16:24:18',
  6: '2022-05-01 12:55:42',
  7: '2022-05-01 19:57:35',
  8: '2022-05-01 17:30:06',
  9: '2022-05-01 19:58:16'}})
df = df.apply(pd.to_datetime)

# 步骤1:计算时间差并换算为小时单位
df['Duration_h'] = (df['End'] - df['Start']).dt.total_seconds() / 3600

# 步骤2:按阈值从高到低判断赋值
df['result'] = np.where(
    df['Duration_h'] > 24, 'x',
    np.where(df['Duration_h'] > 8, 'y',
    np.where(df['Duration_h'] > 1, 'z', 'done'))
)
运行结果

执行后输出如下,赋值逻辑完全符合要求:

Start                 End  Duration_h result
0 2022-05-01 14:32:07 2022-05-01 15:39:51    1.128889      z
1 2022-05-01 13:09:20 2022-05-02 13:10:56   24.026667      x
2 2022-05-01 17:19:12 2022-05-01 21:29:04    4.164444      z
3 2022-05-01 16:12:03 2022-05-01 23:56:27    7.740000      z
4 2022-05-01 13:24:42 2022-05-03 13:28:05   48.056389      x
5 2022-05-01 02:24:17 2022-05-01 16:24:18   14.000278      y
6 2022-05-01 12:53:35 2022-05-01 12:55:42    0.035278   done
7 2022-05-01 09:57:34 2022-05-01 19:57:35   10.000278      y
8 2022-05-01 17:24:29 2022-05-01 17:30:06    0.093611   done
9 2022-05-01 09:58:15 2022-05-01 19:58:16   10.000278      y

提示:如果不需要保留中间计算的小时数列,可以在计算完成后用df.drop(columns='Duration_h', inplace=True)删除即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:48:29