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

【Python】NumPyのintersect1d()を使って2つのPandas DataFrameの共通列を取得する方法

はじめに

2つのDataFrameに共通する列を取得したい場合、NumPyが提供するintersect1d()メソッドが便利です。このメソッドはNumPyの機能であるため、Pandasと合わせてNumPyもインポートしておく必要があります。

import pandas as pd
import numpy as np

サンプルDataFrameの作成

まず、比較対象となる2つのDataFrameを作成しましょう。dataFrame1には4つの列、dataFrame2には2つの列を持たせます。

# dataframe1の作成
dataFrame1 = pd.DataFrame({"Car": ['Bentley', 'Lexus', 'Tesla', 'Mustang', 'Mercedes', 'Jaguar'],
                          "Cubic_Capacity": [2000, 1800, 1500, 2500, 2200, 3000],
                          "Reg_Price": [7000, 1500, 5000, 8000, 9000, 6000],
                          "Units_Sold": [100, 110, 150, 80, 200, 90]
                          })

# dataframe2の作成
dataFrame2 = pd.DataFrame({"Car": ['BMW', 'Lexus', 'Tesla', 'Mustang', 'Mercedes', 'Jaguar'],
                           "Units_Sold": [100, 110, 150, 80, 200, 90]
                           })

intersect1d()で共通列を取得する

共通する列を取得するには、各DataFrameのcolumns属性をnp.intersect1d()に渡します。

res = np.intersect1d(dataFrame2.columns, dataFrame1.columns)

intersect1d()は、引数として渡した2つの配列(ここでは列名のIndex)に共通して含まれる要素を、ソートされた状態で返します。これにより、両方のDataFrameに存在する列名だけを簡単に抽出できます。

完全なコード例

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

import pandas as pd
import numpy as np

# dataframe1の作成
dataFrame1 = pd.DataFrame({"Car": ['Bentley', 'Lexus', 'Tesla', 'Mustang', 'Mercedes', 'Jaguar'],
                          "Cubic_Capacity": [2000, 1800, 1500, 2500, 2200, 3000],
                          "Reg_Price": [7000, 1500, 5000, 8000, 9000, 6000],
                          "Units_Sold": [100, 110, 150, 80, 200, 90]
                          })

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

# dataframe2の作成
dataFrame2 = pd.DataFrame({"Car": ['BMW', 'Lexus', 'Tesla', 'Mustang', 'Mercedes', 'Jaguar'],
                           "Units_Sold": [100, 110, 150, 80, 200, 90]
                           })

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

# intersect1d()で共通列を取得
res = np.intersect1d(dataFrame2.columns, dataFrame1.columns)

print("\nCommon columns...\n", res)

実行結果

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

Dataframe1...
         Car  Cubic_Capacity  Reg_Price  Units_Sold
0  Bentley            2000       7000         100
1    Lexus            1800       1500         110
2    Tesla            1500       5000         150
3  Mustang            2500       8000          80
4 Mercedes            2200       9000         200
5   Jaguar            3000       6000          90
Dataframe2...
         Car  Units_Sold
0      BMW         100
1    Lexus         110
2    Tesla         150
3  Mustang          80
4 Mercedes         200
5   Jaguar          90

Common columns...
['Car' 'Units_Sold']

出力を見ると、両方のDataFrameに存在する「Car」と「Units_Sold」の2つの列名が正しく抽出されていることが確認できます。

補足:NumPy以外の方法で共通列を取得する

NumPyを使わずに共通列を求めることも可能です。Pythonのセット演算や、Pandasのintersection()メソッドを利用する方法があります。

# セット演算を使う方法
common = set(dataFrame1.columns) & set(dataFrame2.columns)

# Pandas Index の intersection() を使う方法
common = dataFrame1.columns.intersection(dataFrame2.columns)

いずれの方法でも同じ結果が得られますが、配列操作全般でNumPyを活用しているプロジェクトでは、np.intersect1d()を使うのがコードの一貫性の面でおすすめです。

  1. Python Pandas入門:query()メソッドでDataFrameの列をクエリ(条件抽出)する方法

    PandasのDataFrameで列をクエリ(条件による絞り込み)を行うには、query()メソッドを使用します。query()は、文字列形式の条件式を渡すだけで直感的にレコードをフィルタリングできる便利な機能です。 サンプルDataFrameの作成 まず、商品名・期首在庫・期末在庫を持つDataFrameを作成してみましょう。 import pandas as pd dataFrame = pd.DataFrame({ Product: [SmartTV, PenDrive, Speaker, Earphone], Opening_Stock: [300, 700, 1

  2. PythonでNumPyを使って2つの行列を乗算する方法

    はじめにこのチュートリアルでは、PythonのNumPyライブラリを使って2つの行列を乗算する方法を解説します。NumPyを使えば、行列計算は非常にシンプルに記述できます。NumPyには行列の積を計算するためのdotメソッドが用意されています。まずは、以下のコマンドでNumPyライブラリをインストールしましょう。pip install numpyプログラムの流れ行列の乗算を行うプログラムは、以下の手順で作成します。NumPyライブラリをインポートする。乗算したい2つの行列を初期化する。numpy.dot(matrix_1, matrix_2)メソッドで行列の積を計算し、結果を変数に格納する。結