0

0

Pandas 中保留尾部连续重复组的首个出现块(非全局去重)

聖光之護

聖光之護

发布时间:2026-02-21 11:09:00

|

193人浏览过

|

来源于php中文网

原创

Pandas 中保留尾部连续重复组的首个出现块(非全局去重)

本文介绍如何在 Pandas DataFrame 中识别并仅移除尾部连续重复的行组(基于指定列),保留前面所有重复块及最后一个重复块的首部分,而非简单全局去重;适用于日志、时序或分段数据中需“截断末尾冗余”的场景。

本文介绍如何在 pandas dataframe 中识别并**仅移除尾部连续重复的行组**(基于指定列),保留前面所有重复块及最后一个重复块的首部分,而非简单全局去重;适用于日志、时序或分段数据中需“截断末尾冗余”的场景。

在实际数据分析中,我们常遇到一种特殊去重需求:不是对整张表做 drop_duplicates()(会抹平所有重复),也不是按顺序保留首次出现(keep='first'),而是希望仅剔除数据末尾连续出现的、完全相同的行组,同时保留前面所有历史重复块——例如传感器日志中最后几条重复上报记录、用户行为流末尾的冗余点击、或分段处理后残留的重复尾帧。

以如下 DataFrame 为例,我们关注 'name' 和 'age' 列组合是否连续重复(忽略唯一标识 'id'):

import pandas as pd

df = pd.DataFrame({
    'id': [1,2,3,4,5,6,7,8,9,10], 
    'name': ['mary','mary','mary','tom','tom','john','sarah','tom','tom','tom'], 
    'age': [30,30,30,25,25,28,36,25,25,25]
})

目标是保留前两组 'tom'(第3–4行和第7行),但仅保留最后一组 'tom' 的首行(第7行),剔除其后连续重复的第8–9行,最终得到 8 行结果。

核心思路:识别“连续重复块”并标记尾块

关键在于区分 “全局重复”“局部连续重复”。我们不关心 'tom' 是否曾在前面出现过,而只关注:从某一行开始,后续若干行在指定列上是否与前一行完全一致且形成连续段

通塔师AI导航
通塔师AI导航

通塔师AI导航:专业的AI人工智能工具软件导航网站

下载

解决方案采用三步链式逻辑:

  1. 构造连续块标识:使用 df[cols].ne(df[cols].shift()).any(axis=1) 找出每行是否与上一行不同 → 得到布尔序列;再用 .cumsum() 累计求和,为每个连续相同块分配唯一组号;
  2. 定位尾块:获取最大组号(即最后一组的编号),通过 grp.shift().ne(grp.max()) 判断当前行是否属于“尾块之前的部分”;
  3. 过滤保留:用该布尔条件索引原 DataFrame,即可精准截断尾部连续重复块。

完整代码如下:

cols = ['name', 'age']  # 定义用于判断重复的列(排除 id)
grp = df[cols].ne(df[cols].shift()).any(axis=1).cumsum()  # 生成连续块组号
cond = grp.shift().ne(grp.max())  # True 表示:该行不属于尾块,或为尾块首行(因 shift 后错位)
result = df[cond].reset_index(drop=True)

print(result)

输出:

   id   name  age
0   1   mary   30
1   2   mary   30
2   3   mary   30
3   4    tom   25
4   5    tom   25
5   6   john   28
6   7  sarah   36
7   8    tom   25

关键说明与注意事项

  • grp.shift().ne(grp.max()) 是精髓:它让尾块中除第一行外的所有行对应 False(因为 grp.shift() 在尾块首行返回前一块编号,与 grp.max() 不等 → True;后续行 grp.shift() 返回尾块编号,等于 grp.max() → False),从而自然保留尾块首行、剔除其余。
  • ⚠️ 此方法依赖行序稳定性,不可在未排序的 DataFrame 上直接使用;若原始顺序无意义,请先明确排序依据(如时间戳、id)再执行。
  • ? 若需保留整个尾块的首行 + 前面所有块(即本例效果),此方案最优;若需“仅保留每个连续块的首行”,应改用 df[~df[cols].duplicated()]。
  • ? 可扩展性:cols 支持多列,也兼容含 NaN 的列(ne() 对 NaN 比较返回 True,符合连续块中断预期)。

该技巧填补了 Pandas 原生去重功能的空白,是处理具有局部连续性特征的数据时高效、可读且无需循环的向量化解法。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

75

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

7

2026.01.31

传感器故障解决方法
传感器故障解决方法

传感器故障排除指南:识别故障症状(如误读或错误代码)。检查电源和连接(确保连接牢固,无损坏)。校准传感器(遵循制造商说明)。诊断内部故障(目视检查、信号测试、环境影响评估)。更换传感器(选择相同规格,遵循安装说明)。验证修复(检查信号准确性,监测异常行为)。

484

2024.06.04

数据分析的方法
数据分析的方法

数据分析的方法有:对比分析法,分组分析法,预测分析法,漏斗分析法,AB测试分析法,象限分析法,公式拆解法,可行域分析法,二八分析法,假设性分析法。php中文网为大家带来了数据分析的相关知识、以及相关文章等内容。

492

2023.07.04

数据分析方法有哪几种
数据分析方法有哪几种

数据分析方法有:1、描述性统计分析;2、探索性数据分析;3、假设检验;4、回归分析;5、聚类分析。本专题为大家提供数据分析方法的相关的文章、下载、课程内容,供大家免费下载体验。

289

2023.08.07

网站建设功能有哪些
网站建设功能有哪些

网站建设功能包括信息发布、内容管理、用户管理、搜索引擎优化、网站安全、数据分析、网站推广、响应式设计、社交媒体整合和电子商务等功能。这些功能可以帮助网站管理员创建一个具有吸引力、可用性和商业价值的网站,实现网站的目标。

753

2023.10.16

数据分析网站推荐
数据分析网站推荐

数据分析网站推荐:1、商业数据分析论坛;2、人大经济论坛-计量经济学与统计区;3、中国统计论坛;4、数据挖掘学习交流论坛;5、数据分析论坛;6、网站数据分析;7、数据分析;8、数据挖掘研究院;9、S-PLUS、R统计论坛。想了解更多数据分析的相关内容,可以阅读本专题下面的文章。

528

2024.03.13

Python 数据分析处理
Python 数据分析处理

本专题聚焦 Python 在数据分析领域的应用,系统讲解 Pandas、NumPy 的数据清洗、处理、分析与统计方法,并结合数据可视化、销售分析、科研数据处理等实战案例,帮助学员掌握使用 Python 高效进行数据分析与决策支持的核心技能。

79

2025.09.08

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

796

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号