Pandas知识点-合并操作merge_pandas merge on 多列-程序员宅基地

技术标签: Pandas并操作merge  合并操作merge  Pandas  数据分析必学知识  Pandas知识点  Pandas merge  

Pandas知识点-合并操作merge

merge()方法是Pandas中的合并操作,在数据处理过程中很常用,本文介绍merge()方法的具体用法。

一、基础合并操作

merge(left, right): 将两个DataFrame或Series合并到一起。left和right参数是必传参数,分别传入一个DataFrame或Series对象,合并的顺序与传入的顺序一致。从参数名left和right可以看出,merge()方法主要用于按列合并(横向合并)。

原理如下:

merge()方法也可以实现按行合并(纵向)的效果,需要两个DataFrame的列名完全一样,且要指定合并方式为outer。

如果两个DataFrame的列名完全相同,使用outer合并方式,效果是将两个DataFrame按行合并到一起。merge()默认的合并方式是inner(取交集),列名完全相同时取交集合并的结果是空DataFrame。

原理如下:

其实,此时合并的原理也是按列合并,特殊的是两个DataFrame中列名完全一样,且没有指定on参数。merge()方法自动将所有列同时作为连接列,合并时取并集,所有的连接列在结果中都返回了,得到的效果就与按行合并一样。(理解how参数和on参数后就会明白,下文马上介绍)。

二、连接方式

how: 指定合并时使用的连接方式,连接方式有四种,默认为inner。

inner 内连 取key列的交集
outer 外连 取key列的并集
left 左连 使用左边df的key列
right 右连 使用右边df的key列

三、指定连接的列

on: 指定合并时用于连接(外连,内连,左连,右连)的列。默认为None,merge()方法自动识别两个DataFrame中名字相同的列,作为连接的列,如本文前面的例子中没有指定on参数,也自动识别了相同的列作为连接列。

合并时,先找到两个DataFrame中的连接列key,然后将第一个DataFrame中key列的每个值依次与第二个DataFrame中的key列进行匹配,匹配到一次结果中就会有一行数据。上面的left和right中key列都是k0~k2,k0~k2分别匹配到一次,共匹配三次,所以结果有三行。假如将k0~k2都改成k,则left中的每一个k可以与right中的k匹配到三次(many_to_many,后面会介绍),共匹配9次,结果会有9行。

on参数指定的列必须在两个被合并DataFrame中都有,否则会报错。

on参数也可以指定多列,合并时按多个列进行连接。

在合并时,只有多个列的值同时相等,两个DataFrame才会匹配上。上面的例子中,用于连接的列是key1,key2,k0,k0在两个DataFrame中都有,匹配到一次,k1,k1匹配到两次,k2,k2和k2,k3等都没有匹配成功,所以结果为三行(默认合并方式为inner)。

原理如下:

四、两个DataFrame分别指定连接列

使用on参数时,指定的列必须在两个DataFrame中都有。merge()方法也支持两个DataFrame分别指定连接的列,此时不要求指定列在两个DataFrame中都有。

left_on: 指定第一个DataFrame中用于连接的列,默认为None。

right_on: 指定第二个DataFrame中用于连接的列,默认为None。

当left_on和right_on都指定一样的列时,与用on参数的结果一样。如果left_on和right_on指定不同的列,可能因为连接列的值匹配不上,结果是一个空DataFrame,将连接方式改成outer后才能得到非空的DataFrame。

left_on和right_on也可以指定一个array数组,长度与DataFrame中的列长度相等,连接原理不变。

left_index: 设置第一个DataFrame用行索引进行连接,默认为False。

right_index: 设置第二个DataFrame用行索引进行连接,默认为False。

left_on和right_on可以与left_index和right_index混合使用,当指定了其中一个DataFrame的连接列时,必须同时指定另一个DataFrame的连接列,否则会报错。两个DataFrame都有两种方式指定连接列,所以组合的方式有四种。

DataFrame left right

四种指定连接列的组合

left_on right_on
left_index right_index
left_on right_index
left_index right_on

五、自定义相同列名的后缀

suffixes: 当被合并的两个DataFrame中有相同的列名时,会给列名拼接后缀以作区分,默认为('_x', '_y')。可以修改suffixes参数进行设置,传入长度为2的字符串元组。

六、连接列是否存在DataFrame中

indicator: 在结果中增加一列,显示连接列是否存在于两个DataFrame中。indicator默认为False,如果修改为True,会增加一列,增加的列名默认为_merge。

给indicator参数指定一个值,则将这个值作为新增列的列名。在新增的列中,如果连接列同时存在于两个DataFrame中,则对应的值为both,如果连接列只存在其中一个DataFrame中,则对应的值为left_only或right_only。

七、连接列的对应关系

validate: 用于指定两个DataFrame连接列的对应关系,有one_to_one(一对一),one_to_many(一对多),many_to_one(多对一),many_to_many(多对多)四种对应方式。默认为None,merge()方法自动根据两个DataFrame的连接列采用适合的对应方式。

one_to_one: 检查两个DataFrame中的连接列,值必须唯一。

one_to_many: 检查第一个DataFrame中的连接列,值必须唯一。

many_to_one: 检查第二个DataFrame中的连接列,值必须唯一。

many_to_many: 两个DataFrame连接列中的值都可以不唯一。

使用多对多的对应方式,任何情况都满足,合并不会报错。而使用其他三种方式时,如果one对应的DataFrame中连接列的值不唯一,会报错。所以,在对数据不够了解、也没有特别的对应要求时,不用指定validate参数。

以上就是Pandas合并方法merge()的介绍,本文都是以DataFrame为例,Series合并以及Series与DataFrame合并的原理相似。

如果需要本文代码,可以扫码关注公众号“Python碎片”,然后在后台回复“pandas13”关键字获取完整代码。

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43790276/article/details/117716446

智能推荐

替换JSONObject的key值_jsonobject替换某个key的值-程序员宅基地

文章浏览阅读4.1k次。将JSONObject的key转换成目标值//调用,formData是被替换的json,map是要替换的key值(原理:重组json)//jsonObj = changeJsonObj(jsonObject, hashedMap); public static JSONObject changeJsonObj(JSONObject jsonObj, Map<String, String> keyMap) { JSONObject json = new JSONObj_jsonobject替换某个key的值

基于微信小程序的在线商城设计(后台PHP)_微信小程序商城后端用那个cms-程序员宅基地

文章浏览阅读3.7k次,点赞2次,收藏47次。用户可以在线下扫一扫或者公众号关联小程序码获取小程序应用,或者可以在微信的发现页面搜索小程序,由于小程序的整个文件占用内存空间很小,用户下载安装小程序的过程消耗几乎感知不到,所以从用户获取小程序到点击进入开始使用小程序应用的速度非常快。MINA 框架是微信团队为小程序开发提供的框架名字,MINA 框架通过封装微信客户端提供的文件系统、网络通信、任务管理、数据安全等基础功能,由此对上层提供一整套 JavaScript API,让开发者能够非常方便地使用微信客户端提供的各种基础功能与能力,快速构建一个应用。_微信小程序商城后端用那个cms

Mendix基于SonarQube的代码扫描_mend io 扫描前端项目-程序员宅基地

文章浏览阅读415次。在整个产品的Devops环节中,代码扫描是比较关键的一个环节,常见的工具有findbugs 、pmd、SonarQube等。SonarQube是一个代码质量管理的开源平台,用于检测代码中的错误、漏洞并确保代码规范。它可以与现有的工作流集成,以实现跨项目和拉取请求分支的代码检查,并支持Java、Python、PHP、JavaScript、CSS等25种以上的语言。SonarQube能够集成在IDE、Jenkins、Git等服务中,方便随时查看代码质量分析报告。SonarQube的核心价值有以下几点_mend io 扫描前端项目

显卡+cuda+cudnn+tensorflow安装教程_intel graphics 630能够装conda-程序员宅基地

文章浏览阅读1.5k次。文章目录1. 先修知识1.1 显卡1.2 显卡驱动1.3 Cuda1.4 Cudnn1.5 GPU1.6 **Nouveau**1.7 **GCC是GNU编译器套件**2. 检查本地配置3.NVIDIA显卡驱动安装3.1 官网下载run文件3.2 用指令查看版本3.3 删除旧的显卡驱动3.4 禁止自带的nouveau nvidia驱动3.5 修改bios设置3.6 安装驱动3.7 安装结束后重启电脑,再查看是否安装成功3.8 重新打开桌面3.9 或使用PPA仓库自动化安装**4. 安装CUDA****_intel graphics 630能够装conda

Spring源码之@Import注解解析_@import spring 问题-程序员宅基地

文章浏览阅读376次。Spring中@Import注解以及源码对@Import的解析_@import spring 问题

1497 取余运算-程序员宅基地

文章浏览阅读122次。1497 取余运算时间限制: 1 s空间限制: 128000 KB题目等级 : 钻石 Diamond题解查看运行结果题目描述Description输入b,p,k的值,编程计算bpmodk的值。其中的b,p,k*k为长整型数(2^31范围内)。输入描..._jmeter 取余

随便推点

〖Python 数据库开发实战 - MongoDB篇①〗- MongoDB数据库简介_〖python 数据库开发实战 - mongodb篇 〗- mongodb数据的导入导出-程序员宅基地

文章浏览阅读3.6w次,点赞24次,收藏15次。接下来的一段时间我们将要学习一下 MongoDB 数据库的内容,首先要了解 MongoDB 数据库的背景知识,比如与其他 NoSQL数据库 的区别。接下来就是安装 MongoDB 数据库 与 Robot3T 客户端 ,这样就可以操作 MongoDB 了。需要注意的是 MongoDB 数据库并没有提供类似 Redis 那样的指令,也没有 MySQL 那样的 SQL 语法,操作 MongoDB 的是 JavaScript 的代码,利用 JavaScript 语句操作 MongoDB 数据库。还有一点就是,_〖python 数据库开发实战 - mongodb篇 〗- mongodb数据的导入导出

[Vuejs+php] MySQL数据转JSON传值到前端-程序员宅基地

文章浏览阅读224次。说在前面JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。优点如下[转]:1.占带宽小(格式是压缩的)2.js通过eval()进行Json读取(便于客户端读取)3. JSON支持多种语言(c、c++、PHP等),便于服务端解析关键代码json_encode( $arr )  <文档传送门>ajax   ..._vue sql语句转json

GPS开发、定位修改_virtualposition-程序员宅基地

文章浏览阅读7.4k次。GPS开发、定位修改修改于AOSPandroid7.1.1_r1NMF26Fopenjdk8.0Mint-linuxnexus5x原作者:https://blog.csdn.net/aggresss/article/details/54323034指出文中错误(自己编译时候遇到的)并修正固件共享出来是不可能的,谁知道我的固件里有没有后门,还是用源码自己编译的比较放心新鲜的源码..._virtualposition

Ionic 创建自定义模块(module)_ionicmodule-程序员宅基地

文章浏览阅读903次。在Angular中组件和组件之间可以实现通信,而在 Ionic中每个page是一个模块,而模块里面的组件和其他 page 模块中的组件是无法直接通信的,此时就可以使用自定义模块间接的实现模块之间的通信,类似ng中的模块配置过程,把需要把 page(模块module)暴露出来给其他外部page(模块module)使用,实现步骤如【ionic自定义模块】所示。..._ionicmodule

Java从入门到入坟_Day01_java 从入门到入坟-程序员宅基地

文章浏览阅读263次。个人Java学习请求 —— 协议—— ip—— 端口号—— 资源路径端口号:运行时端口号才回被占用,未运行时端口号可以被其他使用是约束浏览器和服务的请求与响应,是特定数据交互格式,是一个超文本传输协议。作用:写一个美观的呈现程序且能交互的页面,html:书写静态的页面css:美化页面js:让页面能进行交互作用:给前端提供数据的,Java编程:让计算机帮人做事情程序:计算机能识别的是二进制,开发者不能使用二进制开发,使用字母,汉字,标点符号组成的高级语言进行编写虚拟机:Jvm将编写好的代码转换为计算机能看懂的_java 从入门到入坟

React生命周期详解-程序员宅基地

文章浏览阅读1.1w次,点赞3次,收藏31次。整理了一套《前端大厂面试宝典》,包含了HTML、CSS、JavaScript、HTTP、TCP协议、浏览器、VUE、React、数据结构和算法,一共201道面试题,并对每个问题作出了回答和解析_react生命周期

推荐文章

热门文章

相关标签