python 数据合并函数merge( )[通俗易懂]

python 数据合并函数merge( )[通俗易懂]python中的merge函数与sql中的join用法非常类似,以下是merge()函数中的参数:merge(left,right,how=’inner’,on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=False,suffixes=(‘_x’,’_y’),cop…

大家好,又见面了,我是你们的朋友全栈君。

python中的merge函数与sql中的 join 用法非常类似,以下是merge( )函数中的参数:

merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)

一、左右连接键名一样

import pandas as pd
df1=pd.DataFrame({'key':['a','b','a','b','b'],'value1':range(5)})
df2=pd.DataFrame({'key':['a','c','c','c','c'],'value2':range(5)})
display(df1,df2,pd.merge(df1,df2))

df1

   key value1          
0	a	0
1	b	1
2	a	2
3	b	3
4	b	4

df2

   key value2
0	a	0
1	c	1
2	c	2
3	c	3
4	c	4

pd.merge(df1,df2) ##以df1、df2中相同的列名key进行连接,默认how=’inner’, pd.merge(df1,df2,on=’key’,how=’inner’)

   key value1 value2
0	a	  0	    0
1	a	  2	    0

pd.merge(df1,df2,how=’outer’) ##  全连接,取并集

	key	value1	value2
0	a	0.0	0.0
1	a	2.0	0.0
2	b	1.0	NaN
3	b	3.0	NaN
4	b	4.0	NaN
5	c	NaN	1.0
6	c	NaN	2.0
7	c	NaN	3.0
8	c	NaN	4.0

pd.merge(df1,df2,how=’left’)  ### 左连接,左边取全部,右边取部分,没有值则用NaN填充

   key value1 value2
0	a	 0	  0.0
1	b	 1	  NaN
2	a	 2	  0.0
3	b	 3	  NaN
4	b	 4	  NaN

pd.merge(df1,df2,how=’right’) ###  右连接,右边取全部,左边取部分,没有值则用NaN填充

  key value1 value2
0	a	0.0	  0
1	a	2.0	  0
2	c	NaN	  1
3	c	NaN	  2
4	c	NaN	  3
5	c	NaN	  4

二、左右连接键名不一样

如果两个DataFrame的左右连接键的列名不一样,可以用left_on,right_on来进行指定

df3=pd.DataFrame({'lkey':['a','b','a','b','b'],'data1':range(5)})
df4=pd.DataFrame({'rkey':['a','c','c','c','c'],'data2':range(5)})

df3

    lkey  data1
0    a      0
1    b      1
2    a      2
3    b      3
4    b      4

df4

    rkey  data2
0    a      0
1    c      1
2    c      2
3    c      3
4    c      4

pd.merge(df3,df4,left_on=’lkey’,right_on=’rkey’)   ### 内连接,默认how=’inner’

    lkey  data1 rkey  data2
0    a      0    a      0
1    a      2    a      0

pd.merge(df3,df4,left_on=’lkey’,right_on=’lkey’,how=’outer’)  ### 全连接

    lkey  data1 rkey  data2
0    a    0.0    a    0.0
1    a    2.0    a    0.0
2    b    1.0  NaN    NaN
3    b    3.0  NaN    NaN
4    b    4.0  NaN    NaN
5  NaN    NaN    c    1.0
6  NaN    NaN    c    2.0
7  NaN    NaN    c    3.0
8  NaN    NaN    c    4.0

pd.merge(df3,df4,left_on=’lkey’,right_on=’rkey’,how=’left’)  ### 左连接

    lkey  data1 rkey  data2
0    a      0    a    0.0
1    b      1  NaN    NaN
2    a      2    a    0.0
3    b      3  NaN    NaN
4    b      4  NaN    NaN

pd.merge(df3,df4,left_on=’lkey’,right_on=’rkey’,how=’right’)  ### 右连接

    lkey  data1 rkey  data2
0    a    0.0    a      0
1    a    2.0    a      0
2  NaN    NaN    c      1
3  NaN    NaN    c      2
4  NaN    NaN    c      3
5  NaN    NaN    c      4

三、索引作为连接键

df5=pd.DataFrame(np.arange(12).reshape(3,4),index=list('abc'),columns=['v1','v2','v3','v4'])
df6=pd.DataFrame(np.arange(12,24,1).reshape(3,4),index=list('abd'),columns=['v5','v6','v7','v8'])

df5

    v1  v2  v3  v4
a   0   1   2   3
b   4   5   6   7
c   8   9  10  11

df6

   v5  v6  v7  v8
a  12  13  14  15
b  16  17  18  19
d  20  21  22  23

pd.merge(df5,df6,left_index=True,right_index=True)

	v1	v2	v3	v4	v5	v6	v7	v8
a	0	1	2	3	12	13	14	15
b	4	5	6	7	16	17	18	19
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/130141.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)


相关推荐

  • malloc函数用法

    malloc函数用法1、函数声明void*malloc(intsize);说明:malloc向系统申请分配size字节的内存空间,返回类型为void*类型。2、使用int*p;p=(int*)malloc(sizeof(int));注意:(1)因为malloc返回的是不确定类型的指针,所以返回之前必须经过类型强制转换,否则编译报错,如:“不能将void*赋值给int*变量

  • journalctl 清理journal日志

    journalctl 清理journal日志在CentOS7开始使用的systemd使用了journal日志,这个日志的管理方式和以往使用syslog的方式不同,可以通过管理工具维护。使用df-h检查磁盘文件,可以看到/run目录下有日志目录/run/log/journal,占用了数G空间FilesystemSizeUsedAvailUse%Mountedon/dev/ma…

  • 浙江八年级 python_如何看待浙江八年级将新增python编程以及数据结构等课程?…

    浙江八年级 python_如何看待浙江八年级将新增python编程以及数据结构等课程?…不是吧阿sir,这后浪来的有点快吧放观点:可以在教育中普及编程语言引导学生学习,但不能把它变成所有初中生的必修课你把VB这种过时东西扔掉,我举双手赞成;你让学有余力、对这方面感兴趣的同学在课余时间研习一下代码和算法,我对此是鼓励的;但是你把python拿过来强制所有人学,那这门课1)如果加入记分考试,那这在应试教育体系下纯粹是给学生增加负担(我们学校大一下刚学VB这种比python还要简单的语言,…

  • javah的使用[通俗易懂]

    javah的使用[通俗易懂]原文链接:http://blog.csdn.net/zgyulongfei/article/details/74371761.无包名的类例如D:\MyTest目录下有一个Test.class文件。那么要生成.h文件,则在控制台下切换到D:\MyTest目录下,然后输入javah-jni Test之后即可在D:\MyTest下找到Test.h头文件

  • maven打包时打包指定的lib文件夹

    maven打包时打包指定的lib文件夹今天在打包自己的springboot项目时遇到了问题,报找不到类和符号。因为我有些依赖是放在项目lib文件夹中,那么打包的时候要连把它一起打包。修改pom.xml,添加一下内容:<build><plugins><plugin><groupId>or…

  • 守护进程「建议收藏」

    守护进程「建议收藏」[toc]终端在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进程的控制终端(ControllingTerminal),进程中,控制终端是保存在PC

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号