当前位置: 首页 > news >正文

Pandas_merge_join

在Pandas中,merge和join都是用于合并两个数据集的操作,但它们之间存在一些差异:

  1. 合并依据:
    • merge:可以根据一个或多个键来合并数据集,类似于SQL中的JOIN操作。你可以指定不同的合并方式,如inner、outer、left、right等。
    • join:主要用于合并具有层次化索引(多级索引)的数据帧,它在执行合并时使用的是索引,而不是列的值。
  2. 使用场景:
    • merge:适用于需要基于一个或多个键进行复杂合并的场景,这些键可以是数据帧中的列。
    • join:适用于当数据帧已经具有多级索引,并且你希望基于这些索引进行合并的场景。
  3. 参数:
    • merge:需要指定on参数来确定合并的列,how参数来确定合并的类型。
    • join:不需要指定on或how参数,因为它默认使用索引进行合并,但可以指定on参数来选择使用哪一级别的索引。
  4. 结果:
    • merge:结果数据集中的列可以来自两个数据集,并且可以控制哪些列被合并,哪些列被排除。
    • join:结果数据集通常包含两个数据集的所有列,但会根据索引进行对齐。
  5. 性能:
    • merge:在某些情况下可能比join慢,特别是当合并键不是索引的时候。
    • join:通常在基于索引的合并上更快,因为索引可以加速查找过程。
  6. 例子:
    import pandas as pd

假设有两个DataFrame df1 和 df2

df1 = pd.DataFrame({‘key’: [‘K0’, ‘K1’, ‘K2’, ‘K3’],
‘A’: [‘A0’, ‘A1’, ‘A2’, ‘A3’]})
df2 = pd.DataFrame({‘key’: [‘K0’, ‘K1’, ‘K2’, ‘K3’],
‘B’: [‘B0’, ‘B1’, ‘B2’, ‘B3’]})

使用merge合并

merged_df = pd.merge(df1, df2, on=‘key’)

使用join合并,假设df1和df2都有相同的索引

df1.index = df2.index = [‘K0’, ‘K1’, ‘K2’, ‘K3’]
joined_df = df1.join(df2)

在选择使用merge还是join时,应该根据具体的数据结构和合并需求来决定。如果你需要基于列值进行复杂的合并操作,merge可能是更好的选择。如果你的数据集已经是多级索引,并且你希望基于这些索引进行快速合并,那么join可能更合适。

Pandas 的 join 函数本身并不直接对应 SQL 中的内连接(INNER JOIN)或外连接(OUTER JOIN)。实际上,join 函数的行为更类似于合并具有层次化索引(多级索引,即MultiIndex)的 DataFrame 或 Series 对象。
默认情况下,join 函数执行的是左侧连接(left),这意味着它将会保留左侧数据集(left 参数指定的数据集)的所有行,以及右侧数据集(right 参数指定的数据集)中与左侧数据集索引匹配的行。如果右侧数据集中的索引在左侧数据集中不存在,那么这些行将不会被包括在最终的合并结果中。
然而,你可以通过设置 how 参数来改变 join 函数的行为,以实现类似于 SQL 中的不同类型的连接:
• how=‘left’:只保留左侧数据集的键,这是 join 函数的默认行为。
• how=‘right’:只保留右侧数据集的键。
• how=‘outer’:保留两个数据集中的所有键,类似于 SQL 中的外连接。如果一个键在一个数据集中不存在,那么对应的数据将会被填充为 NaN。
• how=‘inner’:只保留两个数据集都有的键,类似于 SQL 中的内连接。
下面是一个使用 join 函数进行不同类型连接的例子:
import pandas as pd

创建两个示例DataFrame

df1 = pd.DataFrame({‘A’: [‘A0’, ‘A1’, ‘A2’, ‘A3’]}, index=[‘K0’, ‘K1’, ‘K2’, ‘K3’])
df2 = pd.DataFrame({‘B’: [‘B0’, ‘B1’, ‘B2’, ‘B3’]}, index=[‘K0’, ‘K1’, ‘K2’, ‘K4’])

内连接

inner_joined = df1.join(df2, how=‘inner’)

外连接

outer_joined = df1.join(df2, how=‘outer’)

左连接(默认行为)

left_joined = df1.join(df2)

右连接

right_joined = df1.join(df2, how=‘right’)

请注意,join 函数通常用于已经具有多级索引的数据集,而 merge 函数提供了更多的灵活性,允许你基于列值进行合并,并且可以指定合并的类型。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【IoT】将各类遥控器(红外,频射,蓝牙,wifi,Zigbee)等设备接入米家,实现家庭物联网设备控制(以极米Z7X投影仪为例)
  • 【C#】去掉字符串中的第一或最后一位
  • unity 使用Sqlite报错
  • LLama3本地部署安装
  • DevEco Studio 预览器报错踩坑
  • 二进制协议集合
  • 基于springmvc实现文件上传
  • 常见虚拟现实硬件设备及特点
  • C++不同数据类型连接成一个字符串
  • 老程序员回到小地方搞团队接私活
  • Vue | 简单说说 Vuex 实现响应式的原理
  • leetcode203:移除链表元素
  • 【Linux目录结构简析】
  • Datawhale X 李宏毅苹果书 AI夏令营task1-3笔记
  • linux:进程间的通信
  • Debian下无root权限使用Python访问Oracle
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • Flannel解读
  • leetcode46 Permutation 排列组合
  • spring security oauth2 password授权模式
  • vue2.0项目引入element-ui
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 电商搜索引擎的架构设计和性能优化
  • 服务器之间,相同帐号,实现免密钥登录
  • 规范化安全开发 KOA 手脚架
  • 如何学习JavaEE,项目又该如何做?
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 听说你叫Java(二)–Servlet请求
  • 一道闭包题引发的思考
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • !!Dom4j 学习笔记
  • #每日一题合集#牛客JZ23-JZ33
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (4)(4.6) Triducer
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • .net core 6 redis操作类
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .net 托管代码与非托管代码
  • @Autowired多个相同类型bean装配问题
  • @RequestBody与@RequestParam
  • [20161214]如何确定dbid.txt
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [BUUCTF]-Reverse:reverse3解析
  • [BZOJ] 3262: 陌上花开
  • [C/C++入门][ifelse]20、闰年判断
  • [CF703D]Mishka and Interesting sum/[BZOJ5476]位运算
  • [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated c
  • [E单调栈] lc2487. 从链表中移除节点(单调栈+递归+反转链表+多思路)
  • [ffmpeg] aac 音频编码