我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

本文解读pandas.merge()里面的left_indexright_index两个参数。和上一篇文章里面的onleft_onright_on一样,left_indexright_index说的还是两者合并时的标准的。默认情况下,是看的是on所对应的列里面,具有相同元素的两行数据进行连接操作。而本文的left_indexright_index将改写这个概念。

苏南大叔:python编程,解读pandas.merge()合并dataframe的index参数 - dataframe合并index参数
python编程,解读pandas.merge()合并dataframe的index参数(图2-1)

大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码之间的故事。测试环境:python@3.6.8pandas@1.1.5numpy@1.24.4。表面上看说的是index参数,但实质上依然解读是on条件。

前文回顾

有关pandas.merge()合并dataframe的文章,目前有以下两篇文章:

与这些参数类似的sql语言的相关概念,参考文章:

参数默认说明
on用于连接的列名,必须在两个DataFrame对象中都存在
left_on、right_on分别指定 left 和 right 的连接列
left_index 和、right_index如果为True,则使用左边或右边的行索引作为连接键

龙套数据

精心准备的龙套数据如下:

import pandas as pd
left = pd.DataFrame({
    'su': ['苏1', '苏2', '苏'], 'nan': ['南1', '南2', '南'],
    'name': ['sunan', 'susu', 'nannan'], 'key': ['r3', 'r4', 'r5']
}, index=['l1', 'l2', 'c'])
right = pd.DataFrame({
    'da': ['大', '大2', '大3'], 'shu': ['叔', '叔2', '叔3'],
    'name': ['sunan2', 'sunan', 'nannan2'], 'keyy': ['l2', 'l3', 'l4']
}, index=['c', 'r2', 'r3'])
print(left)
print(right)

输出:

    su nan    name key
l1  苏1  南1   sunan  r3
l2  苏2  南2    susu  r4
c    苏   南  nannan  r5

    da shu     name keyy
c    大   叔   sunan2   l2
r2  大2  叔2    sunan   l3
r3  大3  叔3  nannan2   l4

苏南大叔:python编程,解读pandas.merge()合并dataframe的index参数 - index参数效果
python编程,解读pandas.merge()合并dataframe的index参数(图2-2)

默认on链接

本文关联的概念:on/left_on/right_on。这个join的标准是:on里面规定作为标准的列名。然后每行数据查看对应的列,如果单元数据一致,那么,就按着how的标准进行连接。

pd.merge(left, right)

输出:

   su nan   name key  da shu keyy
0  苏1  南1  sunan  r3  大2  叔2   l3

取的是两者的公共列名name中的公共数据sunan,进行的join链接。

left_index=True+right_index=True

这个join的标准就是:不看列名,只看索引名。只要两边对应的索引名一致,就可以按照how的方式进行连接。(也就是说,和具体的字段内容是没有关系了。链接标准从相同列名对应的字段内容,变成了同名索引)

pd.merge(left, right, left_index=True, right_index=True)

输出:

  su nan  name_x key da shu  name_y keyy
c  苏   南  nannan  r5  大   叔  sunan2   l2

这个是取的两者的公共索引c,进行的inner join

left_on+right_index=True

使用left_on来规定该条记录要对应的右侧的索引是谁,在右侧找到对应的索引后,再安装how所规定的方式进行连接。和left_index=True的区别,left_on相当于给左侧的索引重新命名了。

pd.merge(left, right, left_on='key', right_index=True)

输出:

    su nan name_x key  da shu   name_y keyy
l1  苏1  南1  sunan  r3  大3  叔3  nannan2   l4

这个是根据left_on字段的设置,来和右侧的索引值进行比较。找到的公共值r3。然后取得交集。

left_index=True+right_on

使用right_on来规定该条记录要对应的左侧的索引是谁,在左侧找到对应的索引后,再安装how所规定的方式进行连接。和right_index=True的区别,right_on相当于给右侧的索引重新命名了。

pd.merge(left, right, left_index=True, right_on='keyy')

输出:

   su nan name_x key da shu  name_y keyy
c  苏2  南2   susu  r4  大   叔  sunan2   l2

这里是根据right_on的设置,去左边的索引列去找同名索引数据l2。然后取交集。

多重索引【暂不考虑】

目前还没有碰到过dataframe多重索引的情况,所以不考虑left_on设置元组再加right_index=True的情况。当然,也不考虑left_index=Trueright_on设置元组。

结语

本文描述了,两边进行连接标准,从on所代表的字段内容,转变为定义左右的索引名称作为标准。更多苏南大叔的python相关文章,请参考:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python