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

如何高效实现DataFrame当前行与上一行不同列的取值比较计算

性能优化方案

你当前使用逐行迭代的方案性能差的核心原因是走了Python级别的循环,对于大数据量的DataFrame,用pandas原生的向量化操作(底层C实现)可以提升10~100倍的执行效率。
另外注意原有代码存在一个隐性bug:df.sort_values(by=["start_time"]) 没有加inplace=True也没有赋值给新变量,排序结果不会生效,需要先修正。

向量化实现代码

import pandas as pd

def make_decision(df, max_gap):
    # 1. 按start_time排序
    df_sorted = df.sort_values(by=["start_time"]).reset_index(drop=True)
    # 2. 计算到当前行为止的最大stop_time,对应原逻辑中的tod变量
    df_sorted["cum_max_stop"] = df_sorted["stop_time"].cummax()
    # 3. 计算当前行start_time与上一行累积最大stop_time的差值,第一行差值默认设为0
    df_sorted["gap"] = df_sorted["start_time"] - df_sorted["cum_max_stop"].shift(1).fillna(df_sorted["start_time"].iloc[0])
    # 4. 差值超过max_gap的位置生成新分组标记
    df_sorted["group_id"] = (df_sorted["gap"] > max_gap).cumsum()
    # 5. 按分组聚合id列得到最终结果
    return df_sorted.groupby("group_id")["id"].apply(list).tolist()

方案说明

全程没有Python级别的循环,所有计算都走pandas底层优化,大体积DataFrame下性能提升非常明显,逻辑和你原有代码完全对齐:

  • 按start_time排序
  • 累积记录全局最大的stop_time
  • 当前行start_time和上一轮的最大stop_time差值超过max_gap就拆分新分组
  • 每个分组内收集对应的id列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:54:02