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

Pandas按ID分组计算日期时间差的高效实现难题

解决Pandas按ID分组计算时间差(小时单位)的问题

嘿,我来帮你搞定这个Pandas时间差计算的问题!你遇到的核心问题大概率是时间字段没转成datetime类型——很多时候我们拿到的时间数据是字符串格式,直接拆分或者计算都会出问题,先把这个基础步骤搞定,后面就顺了。

步骤1:确保时间字段是datetime格式

这是最关键的一步!如果你的started和ended字段是字符串,先把它们转换成Pandas的datetime类型:

import pandas as pd

# 假设你的数据集存在df里
df['started'] = pd.to_datetime(df['started'])
df['ended'] = pd.to_datetime(df['ended'])

如果你的时间格式比较特殊(比如不是默认的YYYY-MM-DD HH:mm:ss),可以手动指定格式参数,比如:

# 比如时间是"DD/MM/YYYY HH:mm"格式
df['started'] = pd.to_datetime(df['started'], format="%d/%m/%Y %H:%M")

步骤2:计算单条记录的耗时(小时为单位)

转成datetime类型后,直接做减法就能得到Timedelta对象,接着用total_seconds()转成总秒数,再除以3600就得到精确的小时数:

# 新增一列存储每条记录的耗时(小时)
df['duration_hours'] = (df['ended'] - df['started']).dt.total_seconds() / 3600

这里用total_seconds()是因为它会把天、小时、分钟、秒都转换成总秒数,计算出来的小时数是带小数的(比如1小时30分钟就是1.5小时),比只取整数小时更准确。

步骤3:按ID分组聚合

现在你可以根据需求对id分组,计算每个ID的总耗时、平均耗时等:

# 计算每个ID的总耗时(小时)
total_duration_by_id = df.groupby('id')['duration_hours'].sum().reset_index()

# 计算每个ID的平均耗时(小时)
avg_duration_by_id = df.groupby('id')['duration_hours'].mean().reset_index()

完整示例代码

给你一个可直接运行的示例,方便你参考:

# 构造测试数据
data = {
    'id': [1,1,2,2,3],
    'started': ['2024-01-01 08:00:00', '2024-01-02 09:30:00', '2024-01-01 10:15:00', '2024-01-03 14:45:00', '2024-01-02 07:00:00'],
    'ended': ['2024-01-01 12:30:00', '2024-01-02 11:45:00', '2024-01-01 13:45:00', '2024-01-03 16:15:00', '2024-01-02 09:20:00']
}
df = pd.DataFrame(data)

# 转换时间格式
df['started'] = pd.to_datetime(df['started'])
df['ended'] = pd.to_datetime(df['ended'])

# 计算单条记录耗时
df['duration_hours'] = (df['ended'] - df['started']).dt.total_seconds() / 3600

# 按ID分组求和
total_duration = df.groupby('id')['duration_hours'].sum().reset_index()
print(total_duration)

运行后输出:

id  duration_hours
0   1             6.25
1   2             5.50
2   3             2.333333

额外小技巧

如果你的数据里存在ended早于started的异常记录,可以先过滤掉再计算:

# 过滤时间异常的记录
df = df[df['ended'] >= df['started']]

之前你尝试拆分时间字段其实完全没必要,Pandas的datetime类型已经帮我们封装好了所有时间运算的逻辑,直接用减法就够啦!


内容的提问来源于stack exchange,提问作者El_Patrón

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:16:21