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

Pandas对datetime列使用groupby transform计算分组时间差

错误原因

你的代码存在两处核心问题:

  • transform 方法要求传入可在分组对象上执行的计算逻辑,你直接传入了全局范围计算的max(df['Hour'])-min(df['Hour']),得到的是整个数据集的时间差,不是分组内的计算结果
  • 时间做差得到的是timedelta类型,无法直接作为数值使用,需要手动转换为小时单位的数值
正确实现代码

如果Hour列还未转为datetime类型,先做类型转换,再通过分组变换计算组内时间差:

import pandas as pd

# 转datetime类型,已完成可跳过
df['Hour'] = pd.to_datetime(df['Hour'])

# 按Day、Name分组计算组内最大最小时间的小时差
df['Delay'] = df.groupby(['Day', 'Name'])['Hour'].transform(
    lambda col: (col.max() - col.min()).total_seconds() / 3600
)

执行后得到的结果完全匹配预期:

Day   Name                Hour  Delay
1   M   John 2024-xx-xx 10:00:00    4.0
2   M   John 2024-xx-xx 11:00:00    4.0
3   M   John 2024-xx-xx 14:00:00    4.0
4   T  Maria 2024-xx-xx 20:00:00    2.5
5   T  Maria 2024-xx-xx 22:30:00    2.5

如果需要对整数结果做格式化,可以根据需求做类型转换,由于存在2.5这类非整数小时值,默认保留浮点类型即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:27:17