新闻中心

基于多列合并 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 的实用指南的详细内容,更多请关注其它相关文章!


# seo商品标题优化规则  # 网站seo免费咨询  # 萝岗区企业网站优化  # 汉中公司网站优化方法  # 苏州seo推广技术培训  # 宁波营销推广厂家  # 洛阳网站建设最好  # 荆州网站推广排名多少钱  # 10年来品牌营销推广  # 视频搜索网站建设  # 多个  # 中文网  # 可以通过  # 相关文章  # 并在  # 不需要  # 还可以  # 可以使用  # 详细介绍  # 如何使用 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: J*aScript中正确使用querySelectorAll与复杂CSS选择器  J*a TimerTask中HashMap意外清空的深层原因与解决方案  苹果手机如何防止被恶意App追踪  iwriter统一登录平台 iwrite账号密码登录页面  斑马英语APP如何开启夜间护眼阅读_斑马英语APP夜间模式与低蓝光设置教程  Excel如何用迷你图显趋势_Excel用迷你图显趋势【趋势小图】  优化HTML表单样式:解决输入框焦点跳动与元素间距问题  网易大神怎么保存别人动态的图片_网易大神动态图片保存方法  怎么在浏览器上运行HTML文件_浏览器运行HTML文件技巧【技巧】  Composer如何在生产环境安全地执行composer update  Win11怎么开启省电模式_Win11电池节电模式自动开启  PDF文件体积过大处理_PDF压缩技巧详解  b站赚钱渠道_b站收益来源  响应式CSS Grid布局:优化网格项在小屏幕下的堆叠与宽度适配  Python模块化编程:有效管理依赖与避免循环引用  C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言  sublime如何优雅地处理行尾空格_sublime自动清理多余空白字符配置  怎样更改Windows系统的默认安装路径_避免C盘爆满的终极设置【技巧】  sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件  Golang指针如何与map组合使用_Golang map指针组合实践  蛙漫官方正版入口 蛙漫网页在线全集免费观看  一加手机电池耗电快怎么办_一加手机电池耗电快的解决方法  将JSON对象数组转置为键值对列表的实用指南  Node.js 中使用 node-cron 实现定时 API 数据抓取与处理  Golang如何实现微服务鉴权与权限控制_Golang微服务鉴权与权限管理实践  将HTML动态表格多行数据保存到Google Sheet的教程  圆通快递查询实时追踪 圆通物流包裹状态快速查看  京东京造J1和网易云音乐氧气真无线有什么不同_国产电商蓝牙耳机音质对比  Python getattr() 异常处理深度解析:避免程序意外退出  顺丰快件物流信息 官方网站查询入口  Golang如何使用bytes.Split分割字节切片_Golang bytes切片分割方法  mysql备份恢复性能优化_mysql备份恢复性能优化方法  学习通在线学习平台 学习通网页版直接进入课程中心  小米Civi 4录制视频过暗_小米Civi 4亮度优化  Safari怎么安装扩展程序 浏览器插件安装与管理方法【详解】  QQ邮箱网页版快速登录 QQ邮箱邮箱账号官方入口地址  React Router 嵌套组件中 URL 重定向问题的解决方案  Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】  在Go Martini框架中高效服务动态生成图像的实践指南  最新韩小圈网页版登录入口_官网在线观看官方链接  c++如何使用折叠表达式(Fold Expressions)_c++17可变参数模板新技巧  印象笔记怎样用批量导出备知识库_印象笔记用批量导出备知识库【备份方法】  2026春节假期票务安排_2026春节放假购票指南  QQ邮箱网页版入口 QQ邮箱官方邮箱登录通道  荣耀Play7T运行卡顿解决_荣耀Play7T性能优化  蛙漫漫画免费阅读入口_蛙漫官方正版无广告纯净版  c++20的std::jthread是什么_c++可中断线程与RAII式管理  中兴Axon42Ultra怎样在文件App筛图_iPhone中兴Axon42Ultra文件App筛图【图片筛选】  163邮箱网页版入口导航平台 163邮箱网页版登录入口官网导航  Go语言HTML解析:利用Goquery精准获取指定元素内容 

搜索