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

Pandas DataFrame无需排序遍历按连续分类值拆分的实现方法

实现方案

你可以通过生成连续分组标识的方式实现需求,完全基于Pandas向量化运算,性能远高于手动遍历,适配数万条数据毫无压力,具体实现如下:

import pandas as pd

def split_consecutive_groups(df: pd.DataFrame, group_col: str) -> list[pd.DataFrame]:
    # 生成连续分组ID:当前行与上一行分组列值不同时,分组ID累加1
    group_id = (df[group_col] != df[group_col].shift()).cumsum()
    # 按分组ID拆分,返回所有分组的DataFrame列表
    return [group for _, group in df.groupby(group_id, sort=False)]

调用示例

假设你的原始DataFrame命名为df,按type列拆分连续块的调用方式:

group_list = split_consecutive_groups(df, group_col='type')

返回的group_list就是你需要的拆分后的切片列表,顺序和原始数据完全一致,每个元素对应一个连续同值块。

实现原理

  • 用df[group_col].shift()将分组列向上偏移一行,和当前行比较,生成布尔序列,值不同时为True(即新分组的起始行)
  • 对布尔序列执行cumsum()累加,连续相同值的行会得到同一个累加值,也就是分组ID
  • 按分组ID执行groupby,参数sort=False保证分组顺序和原始数据顺序完全一致,不会按分组值排序打乱顺序

性能说明

该实现全程使用Pandas内置的向量化运算,没有Python层的循环,处理10万行以内的数据耗时在毫秒级,完全满足你的性能要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:39:03