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

Pandas按ID分组计算时间区间差值并批量赋值的高效方案

解决方案

核心优化思路:避免逐行循环,提前完成时间类型转换,全部使用pandas向量化操作实现,性能相比原实现提升可达百倍以上。

完整实现代码

import pandas as pd

# 示例数据
data = {'id': [2, 2, 2, 4, 4], 'time': ['22:17:46', '22:19:02', '22:06:00', '22:18:06', '22:18:06']}
df = pd.DataFrame.from_dict(data)

# 第一步:将时间字符串转为datetime类型,仅提取时间部分不影响差值计算
df['time'] = pd.to_datetime(df['time'], format='%H:%M:%S')

# 第二步:按id分组,直接计算每组时间跨度(转分钟保留两位小数),自动广播到所有对应行
df['time_diff'] = df.groupby('id')['time'].transform(lambda x: round((x.max() - x.min()).total_seconds() / 60, 2))

# 如果需要把time列还原为原来的字符串格式,可以取消注释下面这行
# df['time'] = df['time'].dt.strftime('%H:%M:%S')

运行后输出结果和需求的预期格式完全匹配。

原代码性能差的原因

  • 逐行循环调用strptime做时间转换,每一行都要重复执行转换逻辑,大数据量下耗时极高
  • 额外生成了max_time、min_time两个冗余中间列,占用额外内存
  • 没有利用pandas向量化操作的性能优势,纯Python循环的效率远低于C实现的pandas内置方法

注意事项

如果实际业务中分组键是ip_adresa,把groupby('id')替换为groupby('ip_adresa')即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:24:03