Pandas 合并merge

pandas中的mergeconcat类似,但主要是用于两组有key column的数据,统一索引的数据. 通常也被用在Database的处理当中.

1、依据一组key合并

>>> import pandas as pd
>>> 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‘]})
>>> print(left)
  key   A   B
0  K0  A0  B0
1  K1  A1  B1
2  K2  A2  B2
3  K3  A3  B3
>>> print(right)
  key   C   D
0  K0  C0  D0
1  K1  C1  D1
2  K2  C2  D2
3  K3  C3  D3

#依据key column合并,并打印出
>>> res = pd.merge(left, right, on=‘key‘)
>>> print(res)
  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

2、依据两组key合并

合并时有4种方法how = [‘left‘, ‘right‘, ‘outer‘, ‘inner‘],预设值how=‘inner‘

>>> left = pd.DataFrame({‘key1‘: [‘K0‘, ‘K0‘, ‘K1‘, ‘K2‘],
...                       ‘key2‘: [‘K0‘, ‘K1‘, ‘K0‘, ‘K1‘],
...                       ‘A‘: [‘A0‘, ‘A1‘, ‘A2‘, ‘A3‘],
...                       ‘B‘: [‘B0‘, ‘B1‘, ‘B2‘, ‘B3‘]})
>>> right = pd.DataFrame({‘key1‘: [‘K0‘, ‘K1‘, ‘K1‘, ‘K2‘],
...                        ‘key2‘: [‘K0‘, ‘K0‘, ‘K0‘, ‘K0‘],
...                        ‘C‘: [‘C0‘, ‘C1‘, ‘C2‘, ‘C3‘],
...                        ‘D‘: [‘D0‘, ‘D1‘, ‘D2‘, ‘D3‘]})
>>> print(left)
  key1 key2   A   B
0   K0   K0  A0  B0
1   K0   K1  A1  B1
2   K1   K0  A2  B2
3   K2   K1  A3  B3
>>> print(right)
  key1 key2   C   D
0   K0   K0  C0  D0
1   K1   K0  C1  D1
2   K1   K0  C2  D2
3   K2   K0  C3  D3

##依据key1与key2 columns进行合并,并打印出四种结果[‘left‘, ‘right‘, ‘outer‘, ‘inner‘]
>>> res = pd.merge(left, right, on=[‘key1‘, ‘key2‘], how=‘inner‘)
>>> print(res)
  key1 key2   A   B   C   D
0   K0   K0  A0  B0  C0  D0
1   K1   K0  A2  B2  C1  D1
2   K1   K0  A2  B2  C2  D2
>>> res = pd.merge(left, right, on=[‘key1‘, ‘key2‘], how=‘outer‘)
>>> print(res)
  key1 key2    A    B    C    D
0   K0   K0   A0   B0   C0   D0
1   K0   K1   A1   B1  NaN  NaN
2   K1   K0   A2   B2   C1   D1
3   K1   K0   A2   B2   C2   D2
4   K2   K1   A3   B3  NaN  NaN
5   K2   K0  NaN  NaN   C3   D3
>>> res = pd.merge(left, right, on=[‘key1‘, ‘key2‘], how=‘left‘)
>>> print(res)
  key1 key2   A   B    C    D
0   K0   K0  A0  B0   C0   D0
1   K0   K1  A1  B1  NaN  NaN
2   K1   K0  A2  B2   C1   D1
3   K1   K0  A2  B2   C2   D2
4   K2   K1  A3  B3  NaN  NaN
>>> res = pd.merge(left, right, on=[‘key1‘, ‘key2‘], how=‘right‘)
>>> print(res)
  key1 key2    A    B   C   D
0   K0   K0   A0   B0  C0  D0
1   K1   K0   A2   B2  C1  D1
2   K1   K0   A2   B2  C2  D2
3   K2   K0  NaN  NaN  C3  D3

3、Indicator

indicator=True会将合并的记录放在新的一列。

>>> df1 = pd.DataFrame({‘col1‘:[0,1], ‘col_left‘:[‘a‘,‘b‘]})
>>> df2 = pd.DataFrame({‘col1‘:[1,2,2],‘col_right‘:[2,2,2]})
>>> print(df1)
   col1 col_left
0     0        a
1     1        b
>>> print(df2)
   col1  col_right
0     1          2
1     2          2
2     2          2

# 依据col1进行合并,并启用indicator=True,最后打印出
>>> res = pd.merge(df1, df2, on=‘col1‘, how=‘outer‘, indicator=True)
>>> print(res)
   col1 col_left  col_right      _merge
0     0        a        NaN   left_only
1     1        b        2.0        both
2     2      NaN        2.0  right_only
3     2      NaN        2.0  right_only

# 自定indicator column的名称,并打印出
>>> res = pd.merge(df1, df2, on=‘col1‘, how=‘outer‘, indicator=‘indicator_column‘)
>>> print(res)
   col1 col_left  col_right indicator_column
0     0        a        NaN        left_only
1     1        b        2.0             both
2     2      NaN        2.0       right_only
3     2      NaN        2.0       right_only

4、依据index合并

>>> left = pd.DataFrame({‘A‘: [‘A0‘, ‘A1‘, ‘A2‘],
...                      ‘B‘: [‘B0‘, ‘B1‘, ‘B2‘]},
...                      index=[‘K0‘, ‘K1‘, ‘K2‘])
>>> right = pd.DataFrame({‘C‘: [‘C0‘, ‘C2‘, ‘C3‘],
...                       ‘D‘: [‘D0‘, ‘D2‘, ‘D3‘]},
...                      index=[‘K0‘, ‘K2‘, ‘K3‘])
>>> print(left)
     A   B
K0  A0  B0
K1  A1  B1
K2  A2  B2
>>> print(right)
     C   D
K0  C0  D0
K2  C2  D2
K3  C3  D3
#依据左右资料集的index进行合并,how=‘outer‘,并打印出
>>> res = pd.merge(left, right, left_index=True, right_index=True, how=‘outer‘)
>>> print(res)
      A    B    C    D
K0   A0   B0   C0   D0
K1   A1   B1  NaN  NaN
K2   A2   B2   C2   D2
K3  NaN  NaN   C3   D3
#依据左右资料集的index进行合并,how=‘inner‘,并打印出
>>> res = pd.merge(left, right, left_index=True, right_index=True, how=‘inner‘)
>>> print(res)
     A   B   C   D
K0  A0  B0  C0  D0
K2  A2  B2  C2  D2

5、解决overlapping的问题

>>> boys = pd.DataFrame({‘k‘: [‘K0‘, ‘K1‘, ‘K2‘], ‘age‘: [1, 2, 3]})
>>> girls = pd.DataFrame({‘k‘: [‘K0‘, ‘K0‘, ‘K3‘], ‘age‘: [4, 5, 6]})
>>> print(boys)
    k  age
0  K0    1
1  K1    2
2  K2    3
>>> print(girls)
    k  age
0  K0    4
1  K0    5
2  K3    6
#使用suffixes解决overlapping的问题
>>> res = pd.merge(boys, girls, on=‘k‘, suffixes=[‘_boy‘, ‘_girl‘], how=‘inner‘)
>>> print(res)
    k  age_boy  age_girl
0  K0        1         4
1  K0        1         5

原文地址:https://www.cnblogs.com/anhoo/p/9383978.html

时间: 2024-08-30 17:06:20

Pandas 合并merge的相关文章

pandas合并/连接

Pandas具有功能全面的高性能内存中连接操作,与SQL等关系数据库非常相似.Pandas提供了一个单独的merge()函数,作为DataFrame对象之间所有标准数据库连接操作的入口 - pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True) Python 在这里,有以下几个参数可以使用 - left - 一个

Python-dataframe合并(merge函数)

import pandas as pd import numpy as np df1=pd.DataFrame({'key':['b','b','a','c','a','a','b'],'data1':range(7)}) df2=pd.DataFrame({'key':['a','b','d'], 'data2':range(3)}) pd.merge(df1,df2) #没有指明联结的建,会将重叠列的列名当作键. pd.merge(df1,df2,on='key').sort_values(

SVN合并(merge)的使用

使用svn几年了,一直对分支和合并敬而远之,一来是因为分支的管理不该我操心,二来即使涉及到分支的管理,也不敢贸然使用合并功能,生怕合并出了问题对团队造成不良影响,最主要的原因是,自己对分支的目的和合并的方法不甚了解,这才是硬伤. 分支用来维护独立的开发支线,在一些阶段,你可能需要将分支上的修改合并到最新版本,或者将最新版本的修改合并到分支. 此操作十分重要,在团队开发中,如果你是SVN 的维护者此环节可以说是必不可少,因为团队开发中如果使用了分支,那样合并分支到主干.或者分支合并分支的操作是必须

SVN合并(merge),从trunk开发分支到beta测试分支

需求:代码需要从trunk分支合并到beta测试分支,在本地而不是Eclipse插件中操作 1.右键需要合并到(注意:是beta,不是trunk)的文件夹 2.选第一个选项,其他两个,暂时不管 3.URL to merge from : 选择 trunk中的同级目录:Revision range to merge : 选择需要合并的版本. 4.到 beta 文件夹下,提交合并的代码(注意:只提交需要提交的文件,多余的不要提交) 5.commit细节,就不罗嗦了 版权声明:本文为博主原创文章,未经

AutoCAD.Net/C#.Net QQ群:193522571 将DataTable集合 B加入到DataTable A中,应用于两个或以上的只有单行数据的无主键的datatable的合并 Merge

1 /// <summary> 2 /// 将DataTable集合 B加入到DataTable A中,应用于两个或以上的只有单行数据的无主键的datatable的合并 3 /// </summary> 4 /// <param name="ArrOrigeon">A</param> 5 /// <param name="ArrAdded">B</param> 6 /// <returns

Python入门5(pandas中merge中的参数how)

1 import pandas as pd 2 df1 = pd.DataFrame([[1,2,3],[5,6,7],[3,9,0],[8,0,3]],columns=['x1','x2','x3']) 3 df2 = pd.DataFrame([[1,2],[4,6],[3,9]],columns=['x1','x4']) 4 print (df1) 5 print (df2) 6 df3 = pd.merge(df1,df2,how = 'left',on='x1') 7 print (d

pandas的merge方法

数据合并时可以使用merge方法,对两个dataFrame根据某一个series合并,这个方法非常好用,只要找到了合并的标准,新的数据就可以重构出来. 1.命令: pd.merge() on:列名,join用来对齐的那一列的名字,用到这个参数的时候一定要保证左表和右表用来对齐的那一列都有相同的列名. left_on:左表对齐的列,可以是列名,也可以是和dataframe同样长度的arrays. right_on:右表对齐的列,可以是列名,也可以是和dataframe同样长度的arrays. le

Pandas 合并数据

axis合并方向 import pandas as pd import pickle import numpy as np df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d']) df2 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d']) df3 = pd.DataFrame(np.ones((3,4))*2, columns=['a','b','c','d

git 代码分支合并merge提交新修改远程以及本地分支

第一步:创建本地分支 点击右键选择TortoiseGit,选择Create Branch…,在Branch框中填写新分支的名称(若选中”switch to new branch”则直接转到新分支上,省去第二步),点击OK按钮: ? 第二步:通过“Switch/Checkout”切换到新创建的分支上,点击OK: ? ? 第三步:在新分支下执行PUSH操作,在对话框中保持远程分支为空白,点击OK,则将在远程创建了新的分支(在PUSH的时候远程服务器发现远程没有该分支,此时会自动创建一个和本地分支名称