我是靠谱客的博主 负责月光,这篇文章主要介绍【python学习笔记】Dataframe和类SQL的merge函数(二),现在分享给大家,希望可以做个参考。

上一篇文章中提到的merge函数,也就是类似于SQL的join方法中,主要的参数是on参数;

除了on参数,还有专门针对index join的参数:index;

可以理解成是左边的一列和右边的索引进行连接,想了想,R中应该是data.table有这种便利的函数,其实我更喜欢直接用SQLDF包;

书中的例子是:

复制代码
1
2
3
4
left1=DataFrame({'key':['a','b','a','a','b','c'], 'value':range(6)}) right1=DataFrame({'group_val':[3.5,7]},index=['a','b'])

这两个数据框如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
left1 key value 0 a 0 1 b 1 2 a 2 3 a 3 4 b 4 5 c 5
复制代码
1
2
3
4
5
6
7
right1 group_val a 3.5 b 7.0

可以看到下面的right1 的index 是 a和b;

那么:

复制代码
1
2
3
4
pd.merge(left1,right1, left_on='key', right_index=True, how='outer')

这个函数就是针对left1和right1两个数据框进行合并,join的连接键是左边是key这一列,而右边的看到不用on,而是right_index这个参数,结果为

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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了。

复制代码
1
2
3
4
5
6
7
8
9
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中,然后再次合并,发现结果为:

复制代码
1
2
3
4
5
6
7
8
data key value group_val 0 -0.771492 a 0 3.5

也就是通过key,value作为连接键,然后左边连得是data,右边连得是index对应的那一行,

顺便说一句,在索引中,数字一定要是数字形式;比如:

复制代码
1
2
right2=DataFrame({'group_val':[3.5,7]}, index=[['a','b'],[0,0]])

这样是能连接上的,但是如果:

复制代码
1
2
right2=DataFrame({'group_val':[3.5,7]}, index=[['a','b'],['0','0']])

这样的话,0会被默认认为是字符,无法进行连接。

最后

以上就是负责月光最近收集整理的关于【python学习笔记】Dataframe和类SQL的merge函数(二)的全部内容,更多相关【python学习笔记】Dataframe和类SQL内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(172)

评论列表共有 0 条评论

立即
投稿
返回
顶部