如何在 Pandas 中按行识别并提取重复值
发布时间 - 2026-01-21 00:00:00 点击率:次本文介绍如何使用 `pandas.dataframe.apply()` 配合自定义逻辑,高效实现**逐行检测重复值**,并以字符串或集合形式返回每行中出现频次大于 1 的所有元素。
在 Pandas 中,默认的 duplicated() 方法作用于列(即纵向),常用于标记或筛选列方向上的重复行;但当需求变为横向识别每行内部的重复值(例如:某一行中 "bar" 出现两次,则提取 "bar"),就需要转向 apply(axis=1) 的行级操作。
核心思路是:对每一行(Series 对象),统计各元素出现次数,筛选出频次 > 1 的值,并去重汇总。以下是推荐的实现方式:
import pandas as pd
df2 = pd.DataFrame({
"A": ["foo", "foo", "foo", "bar"],
"B": [0, 1, 1, 1],
"C": ["A", "foo", "B", "bar"],
"D": ["bar", "bar", "B", "foo"],
"E": ["bar", "bar", "B", "foo"]
})
# ✅ 推荐方案:返回 set(自动去重 + 无序),语义清晰且性能合理
df2["dup"] = df2.apply(
lambda row: {val for val in row if row.tolist().count(val) > 1},
axis=1
)输出结果为:
A B C D E dup
0 foo 0 A bar bar {bar}
1 foo 1 foo bar bar {foo, bar}
2 foo 1 B B B {B}
3 bar 1 bar foo foo {foo, bar}如需与示例中一致的逗号分隔字符串格式(如 "foo, bar"),可进一步转换:
df2["dup"] = df2["dup"].apply(lambda s: ", ".join(sorted(map(str, s))) if s else "")
⚠️ 注意事项:
- row.tolist().count(val) 在大数据集上效率较低(时间复杂度 O(n²)),若处理超万行数据,建议改用 collections.Counter 优化:
from collections import Counter df2["dup"] = df2.apply( lambda row: {val for val, cnt in Counter(row).items() if cnt > 1}, axis=1 ) - 混合数据类型(如 int 和 str)时,Counter 更健壮;而 == 比较在 NaN 存在时需额外处理(NaN != NaN),如含缺失值,建议先用 row.fillna("MISSING") 统一占位。
- 若需保留首次出现顺序,可用 dict.fromkeys(...) 去重后转 li
st,再过滤。
该方法灵活、可读性强,适用于探索性分析及清洗阶段的行级模式识别任务。
# 大数据
# app
# pandas
# 数据类型
# count
# 字符串
# int
# 对象
# 首次
# 两次
# 适用于
# 自定义
# 较低
# 并以
# 如需
# 再过
# 先用
# 如何使用
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Bootstrap整体框架之CSS12栅格系统
,怎么在广州志愿者网站注册?
Python企业级消息系统教程_KafkaRabbitMQ高并发应用
Laravel怎么在Blade中安全地输出原始HTML内容
如何在万网利用已有域名快速建站?
EditPlus中的正则表达式 实战(4)
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
详解Android图表 MPAndroidChart折线图
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
百度浏览器如何管理插件 百度浏览器插件管理方法
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
长沙做网站要多少钱,长沙国安网络怎么样?
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
米侠浏览器网页背景异常怎么办 米侠显示修复
🚀拖拽式CMS建站能否实现高效与个性化并存?
如何批量查询域名的建站时间记录?
如何在万网ECS上快速搭建专属网站?
BootStrap整体框架之基础布局组件
javascript基于原型链的继承及call和apply函数用法分析
如何在IIS中新建站点并解决端口绑定冲突?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
郑州企业网站制作公司,郑州招聘网站有哪些?
Python函数文档自动校验_规范解析【教程】
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
Python文件异常处理策略_健壮性说明【指导】
Python面向对象测试方法_mock解析【教程】
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
如何在 Pandas 中基于一列条件计算另一列的分组均值
JavaScript Ajax实现异步通信
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
利用python获取某年中每个月的第一天和最后一天
Linux系统命令中tree命令详解
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
如何用搬瓦工VPS快速搭建个人网站?
Java类加载基本过程详细介绍
如何用好域名打造高点击率的自主建站?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
EditPlus 正则表达式 实战(3)
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
桂林网站制作公司有哪些,桂林马拉松怎么报名?
如何在Windows虚拟主机上快速搭建网站?
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
如何在建站宝盒中设置产品搜索功能?


