信息发布→ 登录 注册 退出

基于多列合并 Pandas DataFrames 的实用指南

发布时间:2025-11-17

点击量:

基于多列合并 pandas dataframes 的实用指南

本文档详细介绍了如何使用 Pandas 库基于多个列来合并两个 DataFrames。我们将探讨使用 `merge` 函数的不同方法,包括处理缺失值和排序结果,以生成满足特定需求的合并数据集。通过学习本文,你将掌握高效的数据合并技巧,为后续的数据分析和处理打下坚实基础。

在数据分析和处理中,经常需要将来自不同来源的数据集合并成一个统一的数据集。Pandas 库提供了强大的 merge 函数,可以根据一个或多个列将两个 DataFrames 连接起来。本文将详细介绍如何使用 merge 函数,并提供一些实用的技巧和示例。

使用 merge 函数进行外连接

最直接的方法是使用 pandas.merge 函数执行外连接(outer join)。外连接会保留两个 DataFrame 中的所有行,并在缺失值的地方填充 NaN。为了区分左右 DataFrame 的列名,我们可以使用 add_suffix 函数为列名添加后缀。

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 进行外连接,并添加后缀
out = df1.merge(df2.add_suffix('_'), how='outer',
                left_on=['level', 'title'],
                right_on=['level_', 'title_'])

print(out)

输出结果如下:

     level          title   level_         title_
0  Level 0      Effective  Level 0      Effective
1  Level 1     Evaluation  Level 1     Evaluation
2  Level 1    Ice Breaker      NaN            NaN
3  Level 1           Fire      NaN            NaN
4  Level 2   Introduction  Level 2   Introduction
5  Level 2  Understanding  Level 2  Understanding
6  Level 3        Connect      NaN            NaN
7      NaN            NaN  Level 1         Comedy
8      NaN            NaN  Level 4        Connect

对合并后的结果进行排序

如果需要对合并后的结果进行排序,可以使用 sort_values 函数。在这种情况下,我们不需要手动添加后缀,可以直接在 left_on 和 right_on 参数中指定要合并的列。

Zyro AI Background Remover Zyro AI Background Remover

Zyro推出的AI图片背景移除工具

Zyro AI Background Remover 145 查看详情 Zyro AI Background Remover
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 进行外连接,并排序
out = (df1.merge(df2, how='outer',
                 left_on=[df1['level'], df1['title']],
                 right_on=['level', 'title'])
          .sort_values(by=['level'])
      )

print(out)

输出结果如下:

     level          title level_x      title_x level_y    title_y
0  Level 0      Effective Level 0  Effective Level 0  Effective
1  Level 1     Evaluation Level 1 Evaluation Level 1 Evaluation
2  Level 1    Ice Breaker Level 1 Ice Breaker     NaN        NaN
3  Level 1           Fire Level 1      Fire     NaN        NaN
7  Level 1         Comedy     NaN        NaN Level 1     Comedy
4  Level 2   Introduction Level 2 Introduction Level 2 Introduction
5  Level 2  Understanding Level 2 Understanding Level 2 Understanding
6  Level 3        Connect Level 3    Connect     NaN        NaN
8  Level 4        Connect     NaN        NaN Level 4    Connect

清理结果

如果需要删除重复的列,可以取消注释代码中的 .drop(columns=['level', 'title']) 行。这将删除用于合并的原始列,只保留带有后缀的列。

注意事项

  • 确保要合并的列具有相同的数据类型。如果数据类型不匹配,可能会导致合并失败或产生意外的结果。
  • 如果两个 DataFrame 中存在相同的列名,merge 函数会自动为右侧 DataFrame 的列名添加后缀。可以通过 suffixes 参数自定义后缀。
  • how 参数指定了合并的方式。除了 outer,还可以使用 inner(内连接)、left(左连接)和 right(右连接)。
  • 在处理大型数据集时,合并操作可能会比较耗时。可以考虑使用 dask 等分布式计算框架来加速合并过程。

总结

本文介绍了如何使用 Pandas 库基于多个列来合并两个 DataFrames。通过掌握 merge 函数的不同用法,可以灵活地处理各种数据合并场景。在实际应用中,需要根据具体的需求选择合适的合并方式和参数,并注意数据类型和性能优化等问题。

以上就是基于多列合并 Pandas DataFrames 的实用指南的详细内容,更多请关注其它相关文章!


相关文章: Win11怎么开启卓越性能模式 Win11电源选项启用高性能释放硬件潜力【方法】  飞书妙记怎样用语音转文字速记_飞书妙记用语音转文字速记【速记方法】  精准捕获:如何在页面中监听除特定元素外的所有点击事件  html两个JS只运行一个怎么办_让双JS在html中都运行方法【技巧】  在Go开发中优雅管理ListenAndServe进程:GoSublime集成方案  哔哩哔哩忘记密码了怎么找回_哔哩哔哩密码找回方法  Go调试环境为何无法启动_Go调试器启动失败原因与解决策略  c++中的std::forward_list和std::list有什么不同_c++ forward_list与list区别分析  HTML长属性值处理:表单action路径优化与代码规范应对  C++如何实现线程池_C++11手动实现一个简单的固定大小线程池  学习通网页版快速入口 学习通官网网页版直接打开  拼多多购物车商品数量无法修改如何处理 拼多多购物车操作优化方法  uc浏览器网页版入口 uc浏览器网页版最新网址  解决Django多数据库/多Schema环境下外键迁移问题  曝R星经典之作开发图 设计简陋但信息密集!  铁路12306官网网页端快速入口 铁路12306官方首页登录教程  内存检查:在VS Code中调试C++时的内存视图  WooCommerce后台产品编辑页:获取分类ID并实现角色权限控制  win11怎么查看应用耗电情况 Win11电池设置查看应用能耗排行榜【优化】  excel怎么制作工资条 excel快速生成工资条的方法  Basecamp怎样用留言钉固定重点_Basecamp用留言钉固定重点【重点标记】  微信网页版官方入口直达 微信网页版网页版登录使用方法  想当下一个《2077》?《心之眼》Steam评价升至"多半好评"  Composer如何在生产环境安全地执行composer update  MAC怎么安装Homebrew包管理器_MAC为开发者和高级用户安装命令行工具  AO3网页版合集入口 Archive of Our Own同人作品浏览指南  顺丰快件物流信息 官方网站查询入口  蛙漫正版漫画平台入口_蛙漫免费阅读全站漫画资源  QQ邮箱官网登录入口 QQ邮箱网页版邮箱快速登录  狙击外星人小游戏开始_狙击外星人小游戏立即开始  Composer中的^和~符号代表什么_精通Composer版本号语义化约束  晋江读书网页版在线登录 晋江读书电脑版官网  顺丰国际快递查询 国际件官方查询入口  Go语言JSON解析深度指南:动态访问与结构体映射实践  在VS Code中配置和运行Dart程序的完整步骤  必由学在线入口 必由学网页版快速登录入口  ACG动漫手机版官网入口 手机ACG动漫APP在线观看正版  C#使用XPath查询节点时出错? 常见语法错误与调试技巧  QQ邮箱网页版入口页面 QQ邮箱在线登录入口官网  邮政编码查询不到怎么办_邮政编码查询不到的常见原因与对策  Lar*el Excel导入时生成自定义递增ID的策略与实践  html怎么在cmd下运行php文件_cmd运行html中php文件方法【教程】  Android Studio计算器C键功能异常排查与修复教程  UC浏览器官网入口2025最新 UC浏览器网页版正式地址  优化LangChain文档加载与ChromaDB集成:解决多文档处理与分块问题  J*a TimerTask中HashMap意外清空的深层原因与解决方案  Mudbox图层蒙版怎么用_Mudbox图层蒙版数字雕刻应用技巧  夸克浏览器网页版最新地址 夸克浏览器官方入口合集  怎么搭建一个php网站源码_搭php网站源码搭建教程  MAC怎么让Dock栏只显示当前运行的应用_MAC终端命令实现极简Dock栏 

在线客服
服务热线

服务热线

4008988990

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!