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

Python Pandas入門:merge()で2つのDataFrameの共通行を抽出する方法

merge()で共通の行を取得する基本

Pandasのmerge()メソッドを使って2つのDataFrame(データフレーム)間の共通する行を検索するには、パラメータ「how」に「inner」を指定します。「inner」はSQLの内部結合(INNER JOIN)と同じ働きをするため、両方のDataFrameに存在する行だけを抽出したい場合に最適です。

DataFrame1の作成

まず、「Car」(車名)と「Reg_Price」(登録価格)という2つの列を持つDataFrame1を作成します。

dataFrame1 = pd.DataFrame(
   {
      "Car": ['BMW', 'Lexus', 'Audi', 'Tesla', 'Bentley', 'Jaguar'],
      "Reg_Price": [1000, 1500, 1100, 800, 1100, 900]
   }
)

DataFrame2の作成

次に、同じく2つの列を持つDataFrame2を作成します。一部の車はDataFrame1と登録価格が異なっています。

dataFrame2 = pd.DataFrame(
   {
      "Car": ['BMW', 'Lexus', 'Audi', 'Tesla', 'Bentley', 'Jaguar'],
      "Reg_Price": [1200, 1500, 1000, 800, 1100, 1000]
   }
)

共通の行を検索するコード

merge()に how='inner' を指定して呼び出すだけで、共通の行を取得できます。indicator=False は、各行の出所を示す補助列を作成しない設定です。

dataFrame1.merge(dataFrame2, how='inner', indicator=False)

サンプルコード全体

以下に、一連の処理をまとめた完全なコードを示します。

import pandas as pd

# DataFrame1を作成
dataFrame1 = pd.DataFrame(
   {
      "Car": ['BMW', 'Lexus', 'Audi', 'Tesla', 'Bentley', 'Jaguar'],
      "Reg_Price": [1000, 1500, 1100, 800, 1100, 900]
   }
)

print("DataFrame1 ...\n", dataFrame1)

# DataFrame2を作成
dataFrame2 = pd.DataFrame(
   {
      "Car": ['BMW', 'Lexus', 'Audi', 'Tesla', 'Bentley', 'Jaguar'],
      "Reg_Price": [1200, 1500, 1000, 800, 1100, 1000]
   }
)

print("\nDataFrame2 ...\n", dataFrame2)

# 2つのDataFrame間の共通の行を検索
resData = dataFrame1.merge(dataFrame2, how='inner', indicator=False)
print("\nCommon rows between two DataFrames...\n", resData)

実行結果

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

DataFrame1 ...
      Car  Reg_Price
0     BMW       1000
1   Lexus       1500
2    Audi       1100
3   Tesla        800
4 Bentley       1100
5  Jaguar        900

DataFrame2 ...
      Car  Reg_Price
0     BMW       1200
1   Lexus       1500
2    Audi       1000
3   Tesla        800
4 Bentley       1100
5  Jaguar       1000

Common rows between two DataFrames...
      Car  Reg_Price
0   Lexus       1500
1   Tesla        800
2 Bentley       1100

結果のポイント解説

この例では、両方のDataFrameで「Car」と「Reg_Price」の値が完全に一致している行のみが結果として残ります。BMW、Audi、Jaguarは価格が異なるため除外され、Lexus(1500)、Tesla(800)、Bentley(1100)の3行が共通行として抽出されました。

なお、howパラメータには「left」「right」「outer」「cross」なども指定でき、結合の挙動を柔軟に制御できます。また、indicator=True にすると、各行が左側・右側・両方のどれに存在するかを示す「_merge」列が追加されるため、データの確認やデバッグに便利です。

  1. Python・Pandas DataFrameの統計サマリーを取得する方法

    Pandas DataFrameの統計サマリーとはDataFrameの要約統計量(統計サマリー)を取得するには、describe()メソッドを使用します。このメソッドを呼び出すだけで、件数(count)、平均値(mean)、標準偏差(std)、最小値(min)、四分位数(25%・50%・75%)、最大値(max)といった主要な統計情報を一括して確認できます。1. pandasライブラリのインポートまず、以下のようにpandasライブラリをエイリアス「pd」付きでインポートします。import pandas as pd2. CSVファイルからDataFrameを作成次に、read_csv()メソ

  2. Python Pandas・Seabornのswarmplotで2つのカテゴリ変数を使ってデータをグループ化する方法

    Seabornのスウォームプロット(Swarm Plot)は、点が重ならないように配置されたカテゴリ別散布図を描画するための機能です。この描画には seaborn.swarmplot() を使用します。スウォームを2つのカテゴリ変数でグループ化したい場合は、swarmplot() の x、y、または hue パラメータにそれらの変数を指定します。 ここでは、CSVファイル「Cricketers2.csv」に保存されたデータセットを例に説明します。 必要なライブラリのインポート まず、必要なライブラリをインポートします。 import seaborn as sb import pandas as