【python学习笔记】Dataframe和类SQL的merge函数(二)

上一篇文章中提到的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会被默认认为是字符,无法进行连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值