Pandas DataFrame DataFrame.merge() 関数

Suraj Joshi 2023年1月30日
  1. pandas.DataFrame.merge() の構文
  2. コード例:DataFrame.merge() 2つの DataFrames をマージする関数
  3. コード例:merge メソッドに how パラメータを設定して、さまざまな手法を使用してデータフレームをマージする
  4. コード例:Pandas の DataFrame.merge() 関数を用いて特定の列のみをマージする
  5. コード例:DataFrame をマージするための結合キーとしてインデックスを使用する DataFrame.merge() 関数
Pandas DataFrame DataFrame.merge() 関数

Python Pandas DataFrame.merge() 関数は DataFrame または名前付き系列オブジェクトをマージします。

pandas.DataFrame.merge() の構文

DataFrame.merge(
    right,
    how="inner",
    on=None,
    left_on=None,
    right_on=None,
    left_index=False,
    right_index=False,
    sort=False,
    suffixes="_x",
    "_y",
    copy=True,
    indicator=False,
    validate=None,
)

パラメータ

right DataFrame または名前のついた Series. オブジェクトとマージします。
how leftrightinnerouter のいずれかです。マージ操作の実行方法
on ラベルまたはリスト。マージするカラム名またはインデックス名
left_on ラベルまたはリスト。左側の DataFrame にマージするカラム名またはインデックス名
right_on ラベルまたはリスト。右側の DataFrame にマージするカラム名またはインデックス名
left_index 論理値。左側の DataFrame のインデックスを結合キーとして使用します(left_index=True)
right_index 論理値。右側の DataFrame のインデックスを結合キー(right_index=True)として使用します。
sort 論理値。結合キーをアルファベット順にソートして出力する(sort=True)
suffixes 左側と右側の重複する列名にそれぞれ適用される接尾辞
copy 論理値。コピーを避けるには copy=False を指定します。
indicator 出力 DataFrame_merge という名前のカラムを追加し、各行の情報を出力します(indicator=True) また、出力 DataFrame(indicator=string) に string という名前のカラムを追加します。
validate パラメータを使用して、マージが指定された型であるかどうかを調べます。

戻り値

与えられたオブジェクトをマージした DataFrame を返します。

コード例:DataFrame.merge() 2つの DataFrames をマージする関数

import pandas as pd

df1 = pd.DataFrame(
    {"Name": ["Suraj", "Zeppy", "Alish", "Sarah"], "Working Hours": [1, 2, 3, 5]}
)
df2 = pd.DataFrame({"Name": ["Suraj", "Zack", "Alish", "Raphel"], "Pay": [5, 6, 7, 8]})

print("1st DataFrame:")
print(df1)
print("2nd DataFrame:")
print(df2)

merged_df = df1.merge(df2)
print("Merged DataFrame:")
print(merged_df)

出力:

1st DataFrame:
    Name  Working Hours
0  Suraj              1
1  Zeppy              2
2  Alish              3
3  Sarah              5
2nd DataFrame:
     Name  Pay
0   Suraj    5
1    Zack    6
2   Alish    7
3  Raphel    8
Merged DataFrame:
    Name  Working Hours  Pay
0  Suraj              1    5
1  Alish              3    7

これは、SQLinner-join メソッドを用いて df1df2 を単一の DataFrame にマージします。

inner-join メソッドでは、両方の DataFrames に共通のカラムが少なくとも 1つあることを確認しなければなりません。

ここで、merge() 関数は共通の列の値が同じである行を両方の DataFrames に結合します。

コード例:merge メソッドに how パラメータを設定して、さまざまな手法を使用してデータフレームをマージする

import pandas as pd

df1 = pd.DataFrame(
    {"Name": ["Suraj", "Zeppy", "Alish", "Sarah"], "Working Hours": [1, 2, 3, 5]}
)
df2 = pd.DataFrame({"Name": ["Suraj", "Zack", "Alish", "Raphel"], "Pay": [5, 6, 7, 8]})

print("1st DataFrame:")
print(df1)
print("2nd DataFrame:")
print(df2)

merged_df = df1.merge(df2, how="right")
print("Merged DataFrame:")
print(merged_df)

出力:

1st DataFrame:
    Name  Working Hours
0  Suraj              1
1  Zeppy              2
2  Alish              3
3  Sarah              5
2nd DataFrame:
     Name  Pay
0   Suraj    5
1    Zack    6
2   Alish    7
3  Raphel    8
Merged DataFrame:
     Name  Working Hours  Pay
0   Suraj            1.0    5
1   Alish            3.0    7
2    Zack            NaN    6
3  Raphel            NaN   8 

これは、SQLright-join テクニックを用いて df1df2 を単一の DataFrame にマージします。

ここで、merge() 関数は右の DataFrame からすべての行を返します。しかし、左の DataFrame に存在する行のみが NaN 値を取得します。

同様に、how パラメータの leftouter の値を使用することもできます。

コード例:Pandas の DataFrame.merge() 関数を用いて特定の列のみをマージする

import pandas as pd

df1 = pd.DataFrame(
    {
        "Name": ["Suraj", "Zeppy", "Alish", "Sarah"],
        "Working Hours": [1, 2, 3, 5],
        "Position": ["Salesman", "CEO", "Manager", "Sales Head"],
    }
)
df2 = pd.DataFrame(
    {
        "Name": ["Suraj", "Zack", "Alish", "Raphel"],
        "Pay": [5, 6, 7, 8],
        "Position": ["Salesman", "CEO", "Manager", "Sales Head"],
    }
)

print("1st DataFrame:")
print(df1)
print("2nd DataFrame:")
print(df2)

merged_df = df1.merge(df2, on="Name")
print("Merged DataFrame:")
print(merged_df)

出力:


1st DataFrame:
    Name  Working Hours    Position
0  Suraj              1    Salesman
1  Zeppy              2         CEO
2  Alish              3     Manager
3  Sarah              5  Sales Head
2nd DataFrame:
     Name  Pay    Position
0   Suraj    5    Salesman
1    Zack    6         CEO
2   Alish    7     Manager
3  Raphel    8  Sales Head
Merged DataFrame:
    Name  Working Hours Position_x  Pay Position_y
0  Suraj              1   Salesman    5   Salesman
1  Alish              3    Manager    7    Manager

これは df1df2Name カラムのみを結合します。デフォルトの結合方法は inner-join なので、両方の DataFrame に共通の行のみが結合されます。position カラムは両方の DataFrames に共通なので、Position_xPosition_y という 2つの位置のカラムを持つことになります。

デフォルトでは、_x_y のサフィックスが重複するカラムの名前に付加されます。サフィックスは suffixes パラメータで指定できます。

df1 = pd.DataFrame(
    {
        "Name": ["Suraj", "Zeppy", "Alish", "Sarah"],
        "Working Hours": [1, 2, 3, 5],
        "Position": ["Salesman", "CEO", "Manager", "Sales Head"],
    }
)
df2 = pd.DataFrame(
    {
        "Name": ["Suraj", "Zack", "Alish", "Raphel"],
        "Pay": [5, 6, 7, 8],
        "Position": ["Salesman", "CEO", "Manager", "Sales Head"],
    }
)

print("1st DataFrame:")
print(df1)
print("2nd DataFrame:")
print(df2)

merged_df = df1.merge(df2, on="Name", suffixes=("_left", "_right"))
print("Merged DataFrame:")
print(merged_df)

出力:

1st DataFrame:
    Name  Working Hours    Position
0  Suraj              1    Salesman
1  Zeppy              2         CEO
2  Alish              3     Manager
3  Sarah              5  Sales Head
2nd DataFrame:
     Name  Pay    Position
0   Suraj    5    Salesman
1    Zack    6         CEO
2   Alish    7     Manager
3  Raphel    8  Sales Head
Merged DataFrame:
    Name  Working Hours Position_left  Pay Position_right
0  Suraj              1      Salesman    5       Salesman
1  Alish              3       Manager    7        Manager

コード例:DataFrame をマージするための結合キーとしてインデックスを使用する DataFrame.merge() 関数

import pandas as pd

df1 = pd.DataFrame(
    {
        "Name": ["Suraj", "Zeppy", "Alish", "Sarah"],
        "Working Hours": [1, 2, 3, 5],
        "Position": ["Salesman", "CEO", "Manager", "Sales Head"],
    }
)
df2 = pd.DataFrame(
    {
        "Name": ["Suraj", "Zack", "Alish", "Raphel"],
        "Pay": [5, 6, 7, 8],
        "Position": ["Salesman", "CEO", "Manager", "Sales Head"],
    }
)

print("1st DataFrame:")
print(df1)
print("2nd DataFrame:")
print(df2)

merged_df = df1.merge(
    df2, left_index=True, right_index=True, suffixes=("_left", "_right")
)
print("Merged DataFrame:")
print(merged_df)

出力:


1st DataFrame:
    Name  Working Hours    Position
0  Suraj              1    Salesman
1  Zeppy              2         CEO
2  Alish              3     Manager
3  Sarah              5  Sales Head
2nd DataFrame:
     Name  Pay    Position
0   Suraj    5    Salesman
1    Zack    6         CEO
2   Alish    7     Manager
3  Raphel    8  Sales Head
Merged DataFrame:
  Name_left  Working Hours Position_left Name_right  Pay Position_right
0     Suraj              1      Salesman      Suraj    5       Salesman
1     Zeppy              2           CEO       Zack    6            CEO
2     Alish              3       Manager      Alish    7        Manager
3     Sarah              5    Sales Head     Raphel    8     Sales Head

2つの DataFrames の対応する行を、カラムの類似性を考慮せずにマージします。両方の DataFrame に同じ列名があった場合、結合後は列名に接尾辞を付けて別のカラムにします。

著者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

関連記事 - Pandas DataFrame