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