Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python・Pandasのmerge()関数でDataFrameを右外部結合(Right Outer Join)する方法

Pandas DataFrameを右外部結合でマージするとは

Pandasで2つのDataFrameを結合するには、merge()関数を使用します。右外部結合(Right Outer Join)を実現するには、merge()関数の「how」パラメータに以下のように指定します。

how = "right"

右外部結合では、右側のDataFrame(第2引数に渡したDataFrame)のすべての行が保持され、左側のDataFrameに一致する行がない場合はNaN(欠損値)が補完されます。

Pandasライブラリのインポート

まず、エイリアスを付けてPandasライブラリをインポートします。

import pandas as pd

マージ用の2つのDataFrameを作成

次に、マージ対象となる2つのDataFrameを作成します。共通の列として「Car」を持ちます。

# DataFrame1を作成
dataFrame1 = pd.DataFrame(
    {
        "Car": ['BMW', 'Lexus', 'Audi', 'Mustang', 'Bentley', 'Jaguar'],
        "Units": [100, 150, 110, 80, 110, 90]
    }
)

# DataFrame2を作成
dataFrame2 = pd.DataFrame(
    {
        "Car": ['BMW', 'Lexus', 'Tesla', 'Mustang', 'Mercedes', 'Jaguar'],
        "Reg_Price": [7000, 1500, 5000, 8000, 9000, 6000]
    }
)

ここで、DataFrame1には「Audi」と「Bentley」が含まれ、DataFrame2には「Tesla」と「Mercedes」が含まれている点に注目してください。この違いが、右外部結合の結果に影響します。

右外部結合によるマージの実行

共通列「Car」をキーにし、「how」パラメータに「right」を指定してmerge()を呼び出すことで、右外部結合が実行されます。

mergedRes = pd.merge(dataFrame1, dataFrame2, on='Car', how="right")

サンプルコード全体

以下は、これまでの手順をまとめた完全なコード例です。

import pandas as pd

# DataFrame1を作成
dataFrame1 = pd.DataFrame(
    {
        "Car": ['BMW', 'Lexus', 'Audi', 'Mustang', 'Bentley', 'Jaguar'],
        "Units": [100, 150, 110, 80, 110, 90]
    }
)
print("DataFrame1 ...\n", dataFrame1)

# DataFrame2を作成
dataFrame2 = pd.DataFrame(
    {
        "Car": ['BMW', 'Lexus', 'Tesla', 'Mustang', 'Mercedes', 'Jaguar'],
        "Reg_Price": [7000, 1500, 5000, 8000, 9000, 6000]
    }
)
print("\nDataFrame2 ...\n", dataFrame2)

# 共通列Carをキーに、「how="right"」を指定して右外部結合を実行
mergedRes = pd.merge(dataFrame1, dataFrame2, on='Car', how="right")
print("\n右外部結合でマージしたDataFrame...\n", mergedRes)

実行結果

上記のコードを実行すると、次のような出力が得られます。

DataFrame1 ...
         Car   Units
0       BMW     100
1      Lexus     150
2       Audi     110
3    Mustang      80
4    Bentley     110
5     Jaguar      90

DataFrame2 ...
         Car  Reg_Price
0       BMW       7000
1      Lexus       1500
2      Tesla       5000
3    Mustang       8000
4   Mercedes       9000
5     Jaguar       6000

右外部結合でマージしたDataFrame...
         Car   Units  Reg_Price
0       BMW   100.0       7000
1      Lexus   150.0       1500
2    Mustang    80.0       8000
3     Jaguar    90.0       6000
4      Tesla     NaN       5000
5   Mercedes     NaN       9000

結果のポイント

出力結果から、右外部結合の特徴がよく分かります。


  • 右側のDataFrame2に存在するすべての車種(BMW、Lexus、Mustang、Jaguar、Tesla、Mercedes)が結果に保持されています。
  • 左側のDataFrame1のみに存在する「Audi」と「Bentley」は、右側に対応する行がないため結果から除外されます。
  • 右側のみに存在する「Tesla」と「Mercedes」は、左側に一致するデータがないため、「Units」列がNaN(欠損値)になっています。
  • また、「Units」列の値が100.0のように小数点付きで表示されているのは、NaNが混在することで整数型(int)から浮動小数点型(float)に変換されたためです。


このように、how="right"を指定したmerge()関数を使えば、右側のDataFrameを基準にした結合を簡単に実装できます。逆に左側を基準にしたい場合は「left」、両方の行をすべて保持したい場合は「outer」を指定してください。

  1. Python Pandas入門:DataFrame内のNaN(欠損値)を0に置き換える方法

    PandasのDataFrameに含まれるNaN(欠損値)を0に置き換えるには、fillna()メソッドを使用します。このメソッドは、データクレンジングや前処理の際に非常によく使われる基本的なテクニックです。例として、以下のようなCSVファイル(Microsoft Excelで開いた状態)があるとします。このデータには一部NaN値が含まれています。手順1:必要なライブラリをインポートするまず、Pandasライブラリをインポートします。import pandas as pd手順2:CSVファイルからDataFrameを読み込む次に、read_csv()メソッドを使ってCSVファイルのデータをDa

  2. 【Python】Pandas DataFrameからサブセット(列の一部)を選択する方法

    Pandas DataFrameのサブセット選択とは? Pandasでは、DataFrameから必要な列や行だけを取り出す操作を「サブセットの選択」と呼びます。大きなデータセットから目的のデータだけを抽出できれば、分析や前処理の効率が大幅に向上します。 この記事では、CSVファイルを読み込んだDataFrameから、1つの列、および複数の列を選択する基本的な方法を解説します。 使用するCSVファイルの内容 今回使用する「SalesData.csv」は、Microsoft Excelで開くと以下のような内容になっています。 CSVファイルからDataFrameを作成する まず、pd.rea