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

Python Pandas入門:2つのDataFrame間の共通しない行(差分行)を抽出する方法

pandasでは、concat()メソッドとdrop_duplicates()を組み合わせることで、2つのDataFrame間の共通しない行(差分行)を簡単に抽出できます。まず、必要なライブラリをエイリアス付きでインポートしましょう。

import pandas as pd

2つの列を持つDataFrame1を作成します。

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

同様に、同じ構造を持つDataFrame2を作成します。

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

2つのDataFrameを連結した後、重複する行をすべて削除することで、共通しない行だけを取り出します。drop_duplicates(keep=False)は重複行を全件削除するため、両方のDataFrameに存在する同一の行が消え、差分のみが残ります。

print("\n2つのDataFrame間の共通しない行...\n",
      pd.concat([dataFrame1, dataFrame2]).drop_duplicates(keep=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": [1000, 1300, 1000, 800, 1100, 800]
   }
)

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

# 2つのDataFrame間の共通しない行を抽出して出力
print("\n2つのDataFrame間の共通しない行...\n",
      pd.concat([dataFrame1, dataFrame2]).drop_duplicates(keep=False))

実行結果

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

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       1000
1    Lexus       1300
2     Audi       1000
3    Tesla        800
4  Bentley       1100
5   Jaguar        800

2つのDataFrame間の共通しない行...
      Car  Reg_Price
1   Lexus       1500
2    Audi       1100
5  Jaguar        900
1   Lexus       1300
2    Audi       1000
5  Jaguar        800

仕組みのポイント

pd.concat([dataFrame1, dataFrame2])で2つのDataFrameを縦方向に連結し、その結果に対してdrop_duplicates(keep=False)を適用します。このとき、両方のDataFrameに同一内容で存在する行(上の例ではBMW、Tesla、Bentleyの行)がすべて削除され、片方にしか存在しない行だけが出力に残ります。この手法は、データの差分チェックや更新前後の比較などに幅広く活用できます。

  1. Python Pandasのeval()関数で行の合計を評価・計算する方法

    eval()関数で行の合計を求める Pandasのeval()関数は、文字列で記述した数式をDataFrameに対して直接評価できる便利な機能です。これを利用すると、指定した複数の列の値を足し合わせた行ごとの合計を、新しい列として簡単に追加できます。 まずは、商品の在庫データを含むDataFrameを作成しましょう。 dataFrame = pd.DataFrame({Product: [SmartTV, ChromeCast, Speaker, Earphone], Opening_Stock: [300, 700, 1200, 1500]

  2. 【Python】Pandas DataFrameからnull(欠損値)行を削除する方法|dropna()の使い方

    PandasのDataFrameからnull(NaN)行を削除するには、dropna()メソッドを使用します。この記事では、NaNを含むCSVファイルを読み込み、dropna()で欠損値を含む行を取り除くまでの手順を、サンプルコードと実行結果とともにわかりやすく解説します。前提:NaNを含むCSVファイル今回の例では、一部にNaN(null値)が含まれる以下のようなCSVファイル(CarRecords.csv)を使用します。手順1:read_csv()でCSVファイルを読み込むまずpandasをインポートし、read_csv()を使ってCSVファイルを読み込みます。ここではデスクトップ上に保存