概述
上一篇文章中提到的merge函数,也就是类似于SQL的join方法中,主要的参数是on参数;
除了on参数,还有专门针对index join的参数:index;
可以理解成是左边的一列和右边的索引进行连接,想了想,R中应该是data.table有这种便利的函数,其实我更喜欢直接用SQLDF包;
书中的例子是:
left1=DataFrame({'key':['a','b','a','a','b','c'],
'value':range(6)})
right1=DataFrame({'group_val':[3.5,7]},index=['a','b'])
这两个数据框如下:
left1
key
value
0
a
0
1
b
1
2
a
2
3
a
3
4
b
4
5
c
5
right1
group_val
a
3.5
b
7.0
可以看到下面的right1 的index 是 a和b;
那么:
pd.merge(left1,right1,
left_on='key',
right_index=True,
how='outer')
这个函数就是针对left1和right1两个数据框进行合并,join的连接键是左边是key这一列,而右边的看到不用on,而是right_index这个参数,结果为
key
value
group_val
0
a
0
3.5
2
a
2
3.5
3
a
3
3.5
1
b
1
7.0
4
b
4
7.0
5
c
5
NaN
其实就是外连接,外连接会产生笛卡尔积,所以每一个a,即使在right数据框中没有也会对应一个重复的值,当然c就是NA了。
left2=DataFrame({'key':['a','b','a','a','b','c'],
'value':range(6),
'data':np.random.randn(6)})
right2=DataFrame({'group_val':[3.5,7]},
index=[['a','b'],[0,0]])
pd.merge(left2,right2,
left_on=['key','value'],
right_index=True,
how='inner')
修正一下这两个数据框,添加两个index在right2中,然后再次合并,发现结果为:
data key
value
group_val
0 -0.771492
a
0
3.5
也就是通过key,value作为连接键,然后左边连得是data,右边连得是index对应的那一行,
顺便说一句,在索引中,数字一定要是数字形式;比如:
right2=DataFrame({'group_val':[3.5,7]},
index=[['a','b'],[0,0]])
这样是能连接上的,但是如果:
right2=DataFrame({'group_val':[3.5,7]},
index=[['a','b'],['0','0']])
这样的话,0会被默认认为是字符,无法进行连接。
最后
以上就是负责月光为你收集整理的【python学习笔记】Dataframe和类SQL的merge函数(二)的全部内容,希望文章能够帮你解决【python学习笔记】Dataframe和类SQL的merge函数(二)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复