如何在 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


相关推荐: 品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  如何在 React 中条件性地遍历数组并渲染元素  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  微信小程序制作网站有哪些,微信小程序需要做网站吗?  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  魔毅自助建站系统:模板定制与SEO优化一键生成指南  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  原生JS获取元素集合的子元素宽度实例  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  太平洋网站制作公司,网络用语太平洋是什么意思?  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  零服务器AI建站解决方案:快速部署与云端平台低成本实践  Bootstrap整体框架之JavaScript插件架构  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  如何在Ubuntu系统下快速搭建WordPress个人网站?  电商网站制作价格怎么算,网上拍卖流程以及规则?  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  详解jQuery中基本的动画方法  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  Linux系统运维自动化项目教程_Ansible批量管理实战  网站制作企业,网站的banner和导航栏是指什么?  高防服务器租用指南:配置选择与快速部署攻略  Firefox Developer Edition开发者版本入口  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  jQuery中的100个技巧汇总  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  iOS发送验证码倒计时应用  西安专业网站制作公司有哪些,陕西省建行官方网站?  Laravel如何使用Collections进行数据处理?(实用方法示例)  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  如何用搬瓦工VPS快速搭建个人网站?  Android滚轮选择时间控件使用详解  Laravel如何使用Service Container和依赖注入?(代码示例)  Laravel如何使用.env文件管理环境变量?(最佳实践)  教你用AI将一段旋律扩展成一首完整的曲子  利用 Google AI 进行 YouTube 视频 SEO 描述优化  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  WordPress 子目录安装中正确处理脚本路径的完整指南