python合并数据集--merge

import pandas as pd
df1 = pd.DataFrame({'data1':range(7),'key':list('bbacaab')})
df2 = pd.DataFrame({'data2':range(3),'key':list('abd')})
df1
Out[36]: 
   data1 key
0      0   b
1      1   b
2      2   a
3      3   c
4      4   a
5      5   a
6      6   b

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

笛卡尔乘积

a = pd.merge(df1,df2)
print(a)
#b = pd.merge(df1,df2,left_on='key1',right_on='key2')
#print(b)

   data1 key  data2
0      0   b      1
1      1   b      1
2      6   b      1
3      2   a      0
4      4   a      0
5      5   a      0

都显示,没有就nan

c = pd.merge(df1,df2,how='outer')
print(c)

   data1 key  data2
0    0.0   b    1.0
1    1.0   b    1.0
2    6.0   b    1.0
3    2.0   a    0.0
4    4.0   a    0.0
5    5.0   a    0.0
6    3.0   c    NaN
7    NaN   d    2.0
df3 = pd.DataFrame({'data1':range(7),'lkey':list('bbacaab')})
df4 = pd.DataFrame({'data2':range(3),'rkey':list('abd')})
df3
Out[38]: 
   data1 lkey
0      0    b
1      1    b
2      2    a
3      3    c
4      4    a
5      5    a
6      6    b

df4
Out[39]: 
   data2 rkey
0      0    a
1      1    b
2      2    d

左右都显示,还是以相交的显示

b = pd.merge(df3,df4,left_on='lkey',right_on='rkey')
print(b)

   data1 lkey  data2 rkey
0      0    b      1    b
1      1    b      1    b
2      6    b      1    b
3      2    a      0    a
4      4    a      0    a
5      5    a      0    a
df5 = pd.DataFrame({'data1':range(6),'key':list('bbacab')})
df6 = pd.DataFrame({'data2':range(5),'key':list('ababd')})
df5
Out[40]: 
   data1 key
0      0   b
1      1   b
2      2   a
3      3   c
4      4   a
5      5   b

df6
Out[41]: 
   data2 key
0      0   a
1      1   b
2      2   a
3      3   b
4      4   d

以左为基准对齐

d = pd.merge(df5,df6,on='key',how='left')
print(d)

    data1 key  data2
0       0   b    1.0
1       0   b    3.0
2       1   b    1.0
3       1   b    3.0
4       2   a    0.0
5       2   a    2.0
6       3   c    NaN
7       4   a    0.0
8       4   a    2.0
9       5   b    1.0
10      5   b    3.0

e = pd.merge(df5,df6)
print(e)
   data1 key  data2
0      0   b      1
1      0   b      3
2      1   b      1
3      1   b      3
4      5   b      1
5      5   b      3
6      2   a      0
7      2   a      2
8      4   a      0
9      4   a      2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值