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

Python・PandasのDataFrameを内部結合(Inner Join)する方法

Pandas DataFrameを内部結合する基本

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

how = "inner"

内部結合では、両方のDataFrameに共通して存在するキーの行のみが結果に残ります。共通しない行は結合後に除外される点が特徴です。

1. pandasライブラリをインポート

まず、pandasライブラリを別名(エイリアス)付きでインポートします。

import pandas as pd

2. 1つ目のDataFrameを作成

車種と販売台数を含むDataFrameを作成します。

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

3. 2つ目のDataFrameを作成

次に、車種と登録価格を含むDataFrameを作成します。

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

4. 内部結合を実行

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

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

完全なサンプルコード

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

#
# Inner JoinによるPandas DataFrameの結合
#

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="inner"を指定して内部結合
mergedRes = pd.merge(dataFrame1, dataFrame2, on ='Car', how ="inner")
print("\nMerged dataframe with inner join...\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

Merged dataframe with inner join...
        Car   Units   Reg_Price
0       BMW     100      7000
1      Lexus     150      1500
2    Mustang      80      8000
3     Jaguar      90      6000

ポイント解説

出力結果を見ると、元のDataFrame1には6行、DataFrame2にも6行ありますが、結合後は4行になっています。これは、両方のDataFrameに共通して存在する車種(BMW、Lexus、Mustang、Jaguar)だけが残され、片方にしか存在しない「Audi」「Bentley」「Tesla」「Mercedes」の行が除外されたためです。

なお、サンプルコード内のprint文はPython 3系の文法(関数呼び出し形式)に合わせています。古いPython 2系では括弧なしでも動作しましたが、現在は括弧を付けるのが標準です。

  1. PythonのMatplotlibでPandas DataFrameのヒストグラムを描画する方法

    ヒストグラムとは、データの分布を視覚的に表現したグラフです。PandasのDataFrameからヒストグラムを作成するには、Matplotlibのhist()メソッドを使用します。この記事では、具体的なコード例とともに、その手順をわかりやすく解説します。必要なライブラリのインポートまず、PandasとMatplotlibの2つのライブラリをインポートします。import pandas as pd import matplotlib.pyplot as pltDataFrameの作成次に、「Car(車名)」と「Reg_Price(登録価格)」の2つの列を持つDataFrameを作成します。dat

  2. 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