python编程,解读pandas.merge()合并dataframe的index参数
发布于 作者:苏南大叔 来源:程序如此灵动~本文解读pandas.merge()
里面的left_index
和right_index
两个参数。和上一篇文章里面的on
、left_on
、right_on
一样,left_index
和right_index
说的还是两者合并时的标准的。默认情况下,是看的是on
所对应的列里面,具有相同元素的两行数据进行连接操作。而本文的left_index
和right_index
将改写这个概念。
大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码之间的故事。测试环境:python@3.6.8
,pandas@1.1.5
,numpy@1.24.4
。表面上看说的是index
参数,但实质上依然解读是on
条件。
前文回顾
有关pandas.merge()
合并dataframe
的文章,目前有以下两篇文章:
与这些参数类似的sql
语言的相关概念,参考文章:
- https://newsn.net/say/mysql-inner-join.html
- https://newsn.net/say/mysql-left-join.html
- https://newsn.net/say/mysql-using.html
- https://newsn.net/say/mysql-nature-join.html
参数 | 默认 | 说明 |
---|---|---|
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
默认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=True
加right_on
设置元组。
结语
本文描述了,两边进行连接标准,从on
所代表的字段内容,转变为定义左右的索引名称作为标准。更多苏南大叔的python
相关文章,请参考:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。