📜  Pandas merge()

📅  最后修改于: 2020-10-29 02:11:43             🧑  作者: Mango

Pandas DataFrame.merge()

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)

参数:

  • right: DataFrame或命名为Series的对象,它与DataFrame合并。
  • how: {‘左’,’右’,’外部’,’内部’},默认为’内部’要执行的合并类型。
    • left:仅使用左框架中的键,类似于SQL左外部联接;保留关键顺序。
    • right:它仅使用右框架中的键,类似于SQL右外部联接;保留关键顺序。
    • outer:它使用了两个框架中键的并集,类似于SQL完全外部联接;按字典顺序对键进行排序。
    • inner:它使用两个框架中关键点的交集,类似于SQL内部联接;保留左键的顺序。
  • on:标签或列表它是要连接的列或索引级别的名称。必须在左侧和右侧的DataFrame中都可以找到它。如果on为None且未在索引上合并,则默认为两个DataFrame中列的交集。 left_on:标签或列表,或类似数组。它是左侧DataFrame中用作键的列或索引级别的名称。它可以是长度等于DataFrame长度的数组。
  • right_on:标签或列表,或类似数组。它是来自右侧DataFrame的列或索引级别的名称,用作键。它可以是长度等于DataFrame长度的数组。
  • left_index:布尔值,默认值为False,它将左侧DataFrame的索引用作连接键,如果为true。对于MultiIndex(分层),另一个DataFrame中的许多键(索引或某些列)应与级别数匹配。
  • right_index:布尔值,默认值为False它将右侧DataFrame中的索引用作连接键。它与left_index的用法相同。
  • sort:布尔值,默认值为False如果为True,它将在结果DataFrame中按字典顺序对连接键进行排序。否则,联接键的顺序取决于联接类型(how关键字)。
  • suffixes: (str,str)的元组,默认值(‘_x’,’ _y ‘)后缀适用于分别重叠左DataFrame和右DataFrame中的列名。列使用(False,False)值在重叠时引发异常。
  • copy: bool,默认为True如果为True,则返回DataFrame的副本。否则,可以避免复制。
  • indicator: bool或str,默认值为False如果为True,它将添加一列以输出DataFrame“ _merge “,其中包含有关每一行源的信息。如果是字符串,则将在每行的源上包含信息的列添加到输出DataFrame中,并且该列将被命名为字符串的值。信息列定义为分类类型,其值为:
    • 合并键仅出现在DataFrame的“左侧”的观察值的“ left_only”
    • 为观察项定义了“ right_only” ,其中合并键仅出现在DataFrame的“右边”,
    • 如果在两个视图中都找到观察的合并键,则“两者”
  • validate: str,可选,如果指定,它将检查下面给出的合并类型:
    • “ one_to_one”或“ 1:1″:它检查合并键在左右数据集中是否唯一。
    • “ one_to_many”或“ 1:m”:它检查合并键在仅左数据集中是否唯一。
    • “ many_to_one”或“ m:1″:它检查合并键在仅正确的数据集中是否唯一。
    • “ many_to_many”或“ m:m”:允许,但不进行检查。

示例1:在一个键上合并两个DataFrame

# import the pandas library
import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4],
   'Name': ['John', 'Parker', 'Smith', 'Parker'],
   'subject_id':['sub1','sub2','sub4','sub6']})
right = pd.DataFrame({
    'id':[1,2,3,4],
   'Name': ['William', 'Albert', 'Tony', 'Allen'],
   'subject_id':['sub2','sub4','sub3','sub6']})
print (left)
print (right)

输出量

    id      Name     subject_id

0   1       John        sub1
1   2       Parker      sub2
2   3       Smith       sub4
3   4       Parker      sub6

    id      Name     subject_id

0   1       William     sub2
1   2       Albert      sub4
2   3       Tony        sub3
3   4       Allen       sub6 

示例2:在多个键上合并两个DataFrame:

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
    'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left,right,on='id')

输出量

    id   Name_x    subject_id_x   Name_y     subject_id_y
0   1     John      sub1          William     sub2
1   2     Parker    sub2          Albert      sub4
2   3     Smith     sub4          Tony        sub3
3   4     Parker    sub6          Allen       sub6