基于多列合并 Pandas DataFrames 的方法

基于多列合并 pandas dataframes 的方法

本文介绍了如何基于多个列将两个 Pandas DataFrames 进行合并,并处理缺失值的情况。我们将探讨使用 `merge` 函数以及 `add_suffix` 函数来清晰区分左右 DataFrame 的列,并展示如何对合并后的结果进行排序。

Pandas 提供了强大的数据合并功能,其中 merge 函数是实现 DataFrame 连接的关键工具。当需要基于多个列进行连接,并且希望处理两个 DataFrame 中存在差异的数据时,需要采取一些额外的技巧。

使用 merge 和 add_suffix

最直接的方法是使用 pandas.DataFrame.merge 函数,并结合 pandas.DataFrame.add_suffix 函数来区分左右 DataFrame 的列名。

import pandas as pd# 示例数据df1 = pd.DataFrame({    'level': ['Level 0', 'Level 1', 'Level 1', 'Level 1', 'Level 2', 'Level 2', 'Level 3'],    'title': ['Effective', 'Evaluation', 'Ice Breaker', 'Fire', 'Introduction', 'Understanding', 'Connect']})df2 = pd.DataFrame({    'level': ['Level 0', 'Level 1', 'Level 1', 'Level 2', 'Level 2', 'Level 4'],    'title': ['Effective', 'Evaluation', 'Comedy', 'Introduction', 'Understanding', 'Connect']})# 使用 merge 和 add_suffixout = df1.merge(df2.add_suffix('_'), how='outer',                left_on=['level', 'title'],                right_on=['level_', 'title_'])print(out)

这段代码首先导入 pandas 库,并创建两个示例 DataFrame df1 和 df2。然后,使用 merge 函数将这两个 DataFrame 连接起来。how=’outer’ 参数指定了外连接,这意味着保留两个 DataFrame 中的所有行,对于没有匹配的行,会填充 NaN 值。left_on 和 right_on 参数分别指定了左侧和右侧 DataFrame 中用于连接的列。add_suffix(‘_’) 用于给 df2 的列名添加后缀,以避免列名冲突。

输出结果如下:

     level          title   level_         title_0  Level 0      Effective  Level 0      Effective1  Level 1     Evaluation  Level 1     Evaluation2  Level 1    Ice Breaker      NaN            NaN3  Level 1           Fire      NaN            NaN4  Level 2   Introduction  Level 2   Introduction5  Level 2  Understanding  Level 2  Understanding6  Level 3        Connect      NaN            NaN7      NaN            NaN  Level 1         Comedy8      NaN            NaN  Level 4        Connect

基于合并键排序

如果需要对合并后的结果基于连接键进行排序,可以使用以下方法:

import pandas as pd# 示例数据df1 = pd.DataFrame({    'level': ['Level 0', 'Level 1', 'Level 1', 'Level 1', 'Level 2', 'Level 2', 'Level 3'],    'title': ['Effective', 'Evaluation', 'Ice Breaker', 'Fire', 'Introduction', 'Understanding', 'Connect']})df2 = pd.DataFrame({    'level': ['Level 0', 'Level 1', 'Level 1', 'Level 2', 'Level 2', 'Level 4'],    'title': ['Effective', 'Evaluation', 'Comedy', 'Introduction', 'Understanding', 'Connect']})out = (df1.merge(df2, how='outer',                 left_on=[df1['level'], df1['title']],                 right_on=['level', 'title'])          .sort_values(by=['level'])          #.drop(columns=['level', 'title']) # uncomment to drop merged keys      )print(out)

这段代码与前一个示例类似,但使用了不同的 left_on 参数,将 df1[‘level’] 和 df1[‘title’] 作为列表传递给 left_on。然后,使用 sort_values 函数基于 ‘level’ 列对结果进行排序。如果需要,可以取消注释 # .drop(columns=[‘level’, ‘title’]) 行来删除合并键。

输出结果如下:

     level          title  level_x        title_x  level_y        title_y0  Level 0      Effective  Level 0      Effective  Level 0      Effective1  Level 1     Evaluation  Level 1     Evaluation  Level 1     Evaluation2  Level 1    Ice Breaker  Level 1    Ice Breaker      NaN            NaN3  Level 1           Fire  Level 1           Fire      NaN            NaN7  Level 1         Comedy      NaN            NaN  Level 1         Comedy4  Level 2   Introduction  Level 2   Introduction  Level 2   Introduction5  Level 2  Understanding  Level 2  Understanding  Level 2  Understanding6  Level 3        Connect  Level 3        Connect      NaN            NaN8  Level 4        Connect      NaN            NaN  Level 4        Connect

注意事项

列名冲突: 在合并 DataFrame 时,需要注意列名冲突的问题。可以使用 add_suffix 或 add_prefix 函数来避免冲突。连接类型: 根据实际需求选择合适的连接类型(inner, outer, left, right)。排序: 如果需要对结果进行排序,可以使用 sort_values 函数。缺失值: 外连接可能会引入缺失值(NaN)。可以使用 fillna 函数来填充缺失值。

总结

本文介绍了如何基于多个列合并 Pandas DataFrames,并处理缺失值和排序的问题。通过使用 merge 函数和 add_suffix 函数,可以灵活地控制 DataFrame 的连接方式,并获得所需的结果。 理解这些技巧对于进行复杂的数据分析和处理至关重要。

以上就是基于多列合并 Pandas DataFrames 的方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1380832.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月14日 22:26:34
下一篇 2025年12月14日 22:26:38

相关推荐

  • 使用Python和正则表达式从字符串中提取关键词右侧文本

    本文将详细介绍如何使用python,特别是正则表达式,从字符串中截取并保留指定关键词右侧的内容。通过高效的正则表达式模式,我们可以精确地移除关键词及其左侧的所有文本,从而获得所需的目标子串。这对于处理音频转录等需要基于特定标记进行内容筛选的场景尤为实用。 Python字符串:从指定关键词开始截取右侧…

    2025年12月14日
    000
  • 使用Python处理CSV文件中的列不一致及编码问题教程

    本教程旨在解决处理大型csv文件时常见的列数不一致和编码错误。我们将详细介绍如何利用python的`csv`模块,高效识别并报告csv文件中列数不符合预期标准的行,包括生成详细的单行报告和更简洁的行范围报告,并探讨如何正确处理unicode编码问题,确保数据导入前的质量检查。 在数据处理和导入(例如…

    2025年12月14日
    000
  • Python处理嵌套字典缺失键:defaultdict与.get()的实践指南

    在python中处理来自嵌套字典的数据时,如果键缺失,直接访问会导致`keyerror`,特别是在为数据库准备数据时。本文将介绍两种优雅且pythonic的方法来解决此问题:利用`collections.defaultdict`实现深度默认值,以及通过链式调用`.get()`方法来安全地获取值。这些…

    2025年12月14日
    000
  • Mypy类型检查一致性:解决本地、pre-commit与CI环境差异

    本文深入探讨了在Python项目中,Mypy类型检查在本地开发环境、pre-commit钩子和持续集成(CI)流程中出现不一致行为的常见原因及解决方案。核心在于理解Mypy的不同调用方式(全目录扫描与文件列表传递)、环境差异(Python及依赖版本)以及如何通过标准化配置和显式类型注解来确保类型检查…

    2025年12月14日
    000
  • 利用数位DP高效计算指定范围内数位和小于等于X的整数数量

    本文详细介绍了如何使用数位动态规划(digit dp)算法,高效计算在给定大范围 `[1, n]` 内,其数位和小于或等于特定值 `x` 的整数数量。针对 `n` 值可达 `10^12` 的情况,传统遍历方法效率低下,数位dp通过递归分解问题并结合记忆化搜索,将时间复杂度优化至对数级别,有效解决了大…

    2025年12月14日
    000
  • 高效集成变长列表数据至Pandas DataFrame:避免性能碎片化

    本文详细阐述了如何高效且优雅地将外部变长列表数据作为新列添加到现有Pandas DataFrame中,同时避免因频繁操作或数据长度不一致导致的性能碎片化警告。通过结合Python的`itertools.zip_longest`函数处理数据对齐与填充,并利用Pandas的`pd.concat`进行一次…

    2025年12月14日
    000
  • 高效计算指定范围内数字和小于等于特定值的整数计数算法

    本文深入探讨了如何在给定大范围 `n` 内,高效计算数字和小于等于 `x` 的整数数量。针对传统循环遍历的低效性,文章详细介绍了数字动态规划(digit dp)的核心思想、递归分解策略及记忆化优化,并通过具体示例和python代码,提供了解决此类问题的专业教程方案,确保在大数据量下的高性能计算。 引…

    2025年12月14日
    000
  • Neo4j数据库升级后“版本不匹配”错误解析与最佳实践

    当在neo4j数据库升级后,特别是在高负载下进行升级时,可能遭遇`neo.transienterror.transaction.bookmarktimeout`错误,提示“database ‘neo4j’ not up to the requested version”。此问…

    2025年12月14日
    000
  • Python实现:探索数字乘积等于自身的两位数

    本文将指导您如何使用Python编写程序,寻找所有两位数(10到99之间),这些数字的特点是其十位数字和个位数字的乘积恰好等于数字本身。通过清晰的步骤和代码示例,您将学习如何提取数字的各位,并应用条件判断来识别符合特定数学属性的数字。 1. 问题定义 我们的目标是识别出所有介于10到99之间的两位数…

    2025年12月14日
    000
  • 解决AWS CDK Python项目依赖冲突:V1与V2共存问题及最佳实践

    本文旨在解决aws cdk python项目在安装依赖时遇到的版本冲突问题,特别是当环境中同时存在cdk v1和v2组件时引发的`constructs`版本不兼容。核心解决方案是利用python虚拟环境(virtualenv)创建一个隔离的、纯净的项目空间,确保仅安装和使用目标cdk版本及其兼容的依…

    2025年12月14日
    000
  • 在 C# 中使用 IronPython 运行需要激活 VENV 的脚本

    本文介绍了如何在 C# 中使用 IronPython 运行依赖于已激活 Python 虚拟环境 (VENV) 的脚本。核心在于,并非需要激活 VENV,而是直接指定 VENV 中 Python 解释器的完整路径,从而确保脚本在正确的环境中执行。文章提供了详细的代码示例,展示如何在 C# 中配置 `P…

    2025年12月14日
    000
  • 解决cuDF与Numba在Docker环境中的NVVM缺失错误

    本文旨在解决在docker容器中使用cudf时,由于numba依赖cuda工具包中的nvvm组件缺失而导致的`filenotfounderror`。核心问题在于选择了精简的cuda `runtime`镜像,该镜像不包含numba进行jit编译所需的开发工具。解决方案是切换到包含完整开发工具的cuda…

    2025年12月14日
    000
  • 从列表中移除重复元素:使用remove方法而不创建新列表

    本文详细介绍了如何在Python中,不借助额外的列表,直接使用`remove`或`pop`方法从现有列表中移除重复元素。我们将分析常见错误原因,并提供经过修正的代码示例,同时解释代码逻辑,帮助读者理解并掌握这种原地修改列表的方法。 在Python中,直接在列表上进行修改(原地修改)同时进行迭代,需要…

    2025年12月14日
    000
  • Python代码无报错但无法执行:深度解析与调试策略

    本文探讨python代码在无明显错误提示下停止执行或输出异常的原因,尤其关注因缺少模块导入而被宽泛异常捕获掩盖的问题。文章强调了显式导入、精细化异常处理以及系统性调试方法的重要性,旨在帮助开发者更有效地定位并解决这类“静默失败”的编程难题。 在Python开发中,开发者有时会遇到代码看似正常运行,但…

    2025年12月14日
    000
  • Python:将一维列表转换为递增长度子列表集合的教程

    本文详细介绍了如何使用python将一个一维列表高效地转换为一个包含多个子列表的列表。每个子列表的长度依次递增,从1开始。通过一个简洁的编程方法,无需复杂数据结构,仅利用列表切片和循环逻辑,即可实现此功能,确保输出结构清晰且易于理解,适用于数据处理和转换场景。 引言:列表切片与递增子列表的需求 在数…

    2025年12月14日
    000
  • IntelliJ IDEA文件类型识别与管理:解决.txt误识别为.py问题

    intellij idea通过文件名或哈希bang行识别文件类型,进而提供对应的语法高亮、代码补全和运行功能。当文件类型被错误识别时,例如将`.txt`误创建为`.py`,用户可以通过右键菜单快速覆盖单个文件的类型,或在偏好设置中全局配置文件类型映射,确保ide正确解析和支持代码开发。 在集成开发环…

    2025年12月14日
    000
  • Scrapy多层内部链接爬取优化:避免重复与数据不完整

    本文深入探讨了使用Scrapy框架进行多层内部链接爬取时常见的挑战,特别是如何有效避免数据重复、不完整以及跳过关键内容的问题。通过分析错误的爬取策略,文章提供了优化分页处理、正确使用请求过滤器以及合理组织数据提取和项(Item)提交的专业解决方案,旨在帮助开发者构建更高效、更健壮的Scrapy爬虫。…

    2025年12月14日
    000
  • 使用 Pandas 并行处理多个列:高效统计满足条件的行数

    本文介绍如何使用 Pandas 快速统计 DataFrame 中多个列满足特定条件的行数,并提供向量化方法和并行处理的思路,以提高数据处理效率。重点讲解如何利用 Pandas 内置函数进行高效计算,避免不必要的循环,并探讨并行处理的潜在成本。 在数据分析中,经常需要对 DataFrame 中的多个列…

    2025年12月14日
    000
  • 解决Django runserver 命令意外终止问题

    本文旨在深入探讨Django开发服务器在执行python manage.py runserver命令后可能出现意外终止或无法启动的问题。我们将分析导致此现象的常见原因,包括用户操作(如意外按下Ctrl+C)、端口冲突、环境配置不当等,并提供系统性的排查与解决方案,帮助开发者快速定位并解决服务器启动故…

    2025年12月14日
    000
  • 使用Telethon从Telegram消息中移除图片:理解与实践删除策略

    在使用telethon库处理telegram消息时,直接通过`event.edit(file=none)`移除已发送消息中的图片是不支持的。本文将详细介绍如何在telethon中正确地“移除”图片,其核心策略是删除包含图片的原消息。我们将提供一个完整的python代码示例,演示如何根据消息id获取并…

    2025年12月14日
    000

发表回复

登录后才能评论
关注微信