7-Merge--数据分析

举报
brucexiaogui 发表于 2021/12/29 23:21:38 2021/12/29
【摘要】 Meger合并多个表格中相同字段的数据 In [1]: ...

Meger合并多个表格中相同字段的数据

In [1]:
import pandas as pd
In [2]:
left = pd.DataFrame({'key':['k0','k1','k2','k3'],
                    'A':['A0','A1','A2','A3'],
                    'B':['B0','B1','B2','B3']})
right = pd.DataFrame({'key':['k0','k1','k2','k3'],
                    'C':['C0','C1','C2','C3'],
                    'D':['D0','D1','D2','D3']})
In [3]:
left
Out[3]:
  key A B
0 k0 A0 B0
1 k1 A1 B1
2 k2 A2 B2
3 k3 A3 B3
In [4]:
right
Out[4]:
  key C D
0 k0 C0 D0
1 k1 C1 D1
2 k2 C2 D2
3 k3 C3 D3

使用meger将left表格和right表格同类合并

In [5]:
 
           
pd.merge(left,right)
Out[5]:
  key A B C D
0 k0 A0 B0 C0 D0
1 k1 A1 B1 C1 D1
2 k2 A2 B2 C2 D2
3 k3 A3 B3 C3 D3

meger方法中的on代表选择合并的字段。

In [6]:
 
           
pd.merge(left,right,on='key')
Out[6]:
  key A B C D
0 k0 A0 B0 C0 D0
1 k1 A1 B1 C1 D1
2 k2 A2 B2 C2 D2
3 k3 A3 B3 C3 D3

合并多个元素值相同的字段

In [7]:
 
           
left = pd.DataFrame({'key1':['k0','k1','k2','k3'],
                     'key2':['k0','k1','k2','k3'],
                    'A':['A0','A1','A2','A3'],
                    'B':['B0','B1','B2','B3']})
right = pd.DataFrame({'key1':['k0','k1','k2','k3'],
                      'key2':['k0','k1','k2','k3'],
                    'C':['C0','C1','C2','C3'],
                    'D':['D0','D1','D2','D3']})
In [8]:
left
Out[8]:
  key1 key2 A B
0 k0 k0 A0 B0
1 k1 k1 A1 B1
2 k2 k2 A2 B2
3 k3 k3 A3 B3
In [9]:
right
Out[9]:
  key1 key2 C D
0 k0 k0 C0 D0
1 k1 k1 C1 D1
2 k2 k2 C2 D2
3 k3 k3 C3 D3
In [10]:
 
           
pd.merge(left,right,on='key1')
Out[10]:
  key1 key2_x A B key2_y C D
0 k0 k0 A0 B0 k0 C0 D0
1 k1 k1 A1 B1 k1 C1 D1
2 k2 k2 A2 B2 k2 C2 D2
3 k3 k3 A3 B3 k3 C3 D3
In [11]:
 
           
pd.merge(left,right,on=['key1','key2'])
Out[11]:
  key1 key2 A B C D
0 k0 k0 A0 B0 C0 D0
1 k1 k1 A1 B1 C1 D1
2 k2 k2 A2 B2 C2 D2
3 k3 k3 A3 B3 C3 D3

merge合并相同名称字段时候,两个字段的值不是完全一样。默认是采用交集方式合并

  • 例如下面的left表格的key的值将k3改为k4。和right表格中的key2的k3不一样。
In [16]:
left = pd.DataFrame({'key1':['k0','k1','k2','k3'],
                     'key2':['k0','k1','k2','k4'],
                    'A':['A0','A1','A2','A3'],
                    'B':['B0','B1','B2','B3']})
right = pd.DataFrame({'key1':['k0','k1','k2','k3'],
                      'key2':['k0','k1','k2','k3'],
                    'C':['C0','C1','C2','C3'],
                    'D':['D0','D1','D2','D3']})
In [17]:
left
Out[17]:
  key1 key2 A B
0 k0 k0 A0 B0
1 k1 k1 A1 B1
2 k2 k2 A2 B2
3 k3 k4 A3 B3
In [18]:
right
Out[18]:
  key1 key2 C D
0 k0 k0 C0 D0
1 k1 k1 C1 D1
2 k2 k2 C2 D2
3 k3 k3 C3 D3
 
          
* 指定多个字段合并,字段值一样的保留下来,不一样的值去掉。不显示。默认采用的是交集方式
In [19]:
pd.merge(left,right,on=['key1','key2'])
Out[19]:
  key1 key2 A B C D
0 k0 k0 A0 B0 C0 D0
1 k1 k1 A1 B1 C1 D1
2 k2 k2 A2 B2 C2 D2
  • 指定多个字段合并,字段值一样的保留下来,不一样的值去掉。如果想让不一样的值显示,可以改为并集方式显示
In [20]:
 
           
pd.merge(left,right,on=['key1','key2'],how='outer')
Out[20]:
  key1 key2 A B C D
0 k0 k0 A0 B0 C0 D0
1 k1 k1 A1 B1 C1 D1
2 k2 k2 A2 B2 C2 D2
3 k3 k4 A3 B3 NaN NaN
4 k3 k3 NaN NaN C3 D3

indicator 参数表示显示表格每个字段合并的详细信息

  • both:两个表左右值都显示。 left_only:左联接显示左边表格的数据 right_only:有链接,显示右边表格的数据
In [21]:
pd.merge(left,right,on=['key1','key2'],how='outer',indicator=True)
Out[21]:
  key1 key2 A B C D _merge
0 k0 k0 A0 B0 C0 D0 both
1 k1 k1 A1 B1 C1 D1 both
2 k2 k2 A2 B2 C2 D2 both
3 k3 k4 A3 B3 NaN NaN left_only
4 k3 k3 NaN NaN C3 D3 right_only

how='表格名称' 当how参数填写表格名称时,就会指定以这个表格为基准显示数据

In [23]:
pd.merge(left,right,on=['key1','key2'],how='left')
Out[23]:
  key1 key2 A B C D
0 k0 k0 A0 B0 C0 D0
1 k1 k1 A1 B1 C1 D1
2 k2 k2 A2 B2 C2 D2
3 k3 k4 A3 B3 NaN NaN
In [25]:
pd.merge(left,right,on=['key1','key2'],how='right')
Out[25]:
  key1 key2 A B C D
0 k0 k0 A0 B0 C0 D0
1 k1 k1 A1 B1 C1 D1
2 k2 k2 A2 B2 C2 D2
3 k3 k3 NaN NaN C3 D3
In [ ]:

文章来源: brucelong.blog.csdn.net,作者:Bruce小鬼,版权归原作者所有,如需转载,请联系作者。

原文链接:brucelong.blog.csdn.net/article/details/80739959

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。