pandas之数据合并(索引上的合并、轴向连接、合并重叠数据等)

合并数据集

pandas对象中得数据可以通过一些内置的方式进行合并:
——pandas.merge可根据一个或多个键将不同DataFrame中的连接起来。SQL或其他关系型数据库的用户对此应该会比较熟悉,因为它实现的就是数据库的连接操作。

——pandas.concat可以沿着一条将多个对象堆叠到一起。

——combine_first可以将重复数据编接在一起,用一个对象中的值填充另一个对象中的缺失值。

1、数据库风格的DataFrame合并

(1)数据集的合并(merge)或连接(join)运算是通过一个或多个键将行链接起来的。

df1 = DataFrame({'key':['b','b','a','c','a','a','b'],'data1':range(7)})
df2 = DataFrame({'key':['a','b','d'],'data2':range(3)})
df1
Out[3]: 
  key  data1
0   b      0
1   b      1
2   a      2
3   c      3
4   a      4
5   a      5
6   b      6

df2
Out[4]: 
  key  data2
0   a      0
1   b      1
2   d      2

(2)这是一种多对一的合并。

df1中的数据有多个被标记为a和b的行,而df2中key列的每个值则仅对应一行。对这些对象调用merge即可得到:

pd.merge(df1,df2)    #没有指明用哪个列连接时,merge就会被重叠列的列名当做键。
Out[6]: 
  key  data1  data2
0   b      0      1
1   b      1      1
2   b      6      1
3   a      2      0
4   a      4      0
5   a      5      0

pd.merge(df1,df2,on='key')   #最好显式指定一下
Out[7]: 
  key  data1  data2
0   b      0      1
1   b      1      1
2   b      6      1
3   a      2      0
4   a      4      0
5   a      5      0

(3)如果两个对象的列名不同,也可以分别进行指定:

df3 = DataFrame({'1key':['b','b','a','c','a','a','b'],'data1':range(7)})
df4 = DataFrame({'rkey':['a','b','d'],'data2':range(3)})
pd.merge(df3,df4,left_on='1key',right_on='rkey')
Out[11]: 
  1key  data1 rkey  data2
0    b      0    b      1
1    b      1    b      1
2    b      6    b      1
3    a      2    a      0
4    a      4    a      0
5    a      5    a      0

(4)默认情况下,merge做的是inner连接,结果中的键是交集。其他方式还有“left”、“right”、“outer”,外连接是并集,组合了左连接和右连接的效果。多对多的合并操作非常简单,无需额外的工作。

df1 = DataFrame({'key':['b','b','a','c','a','b'],'data1':range(6)})
df2 = DataFrame({'key':['a','b','a','b','d'],'data2':range(5)})
df1
Out[13]: 
  key  data1
0   b      0
1   b      1
2   a      2
3   c      3
4   a      4
5   b      5

df2
Out[14]: 
  key  data2
0   a      0
1   b      1
2   a      2
3   b      3
4   d      4

pd.merge(df1,df2,on='key',how='left')
Out[15]: 
   key  data1  data2
0    b      0    1.0
1    b      0    3.0
2    b      1    1.0
3    b      1    3.0
4    a      2    0.0
5    a      2    2.0
6    c      3    NaN
7    a      4    0.0
8    a      4    2.0
9    b      5    1.0
10   b      5    3.0

(5)多对多连接产生的是行的笛卡尔积。由于左边的DataFrame有3个“b”行,右边的有2个,所以最终结果中有6个“b”行。

left = DataFrame({'key1':['foo','foo','bar'],'key2':['one','two','one'],'lval'
  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值