Pandas DataFrame DataFrame.merge() 関数
-
pandas.DataFrame.merge()の構文 -
コード例:
DataFrame.merge()2つのDataFramesをマージする関数 -
コード例:
mergeメソッドにhowパラメータを設定して、さまざまな手法を使用してデータフレームをマージする -
コード例:Pandas の
DataFrame.merge()関数を用いて特定の列のみをマージする -
コード例: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 |
left、right、inner、outer のいずれかです。マージ操作の実行方法 |
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
これは、SQL の inner-join メソッドを用いて df1 と df2 を単一の 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
これは、SQL の right-join テクニックを用いて df1 と df2 を単一の DataFrame にマージします。
ここで、merge() 関数は右の DataFrame からすべての行を返します。しかし、左の DataFrame に存在する行のみが NaN 値を取得します。
同様に、how パラメータの left と outer の値を使用することもできます。
コード例: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
これは df1 と df2 の Name カラムのみを結合します。デフォルトの結合方法は inner-join なので、両方の DataFrame に共通の行のみが結合されます。position カラムは両方の DataFrames に共通なので、Position_x と Position_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 is a backend software engineer at Matrice.ai.
LinkedIn