Pandas 2つのデータフレームの中から重複しないデータのみを抽出する

「NOT IN」フィルターを作る方法

Pandasを用いて、2つのデータフレームの中から重複しないデータのみを抽出する「NOT IN」フィルターを作りたいケースはよくあります。この記事では「NOT IN」フィルターを作る方法を解説します。

まず以下のようなデータフレームを作成します。

import pandas as pd
mail_lists_a = pd.DataFrame({"test@aiacademy.jp", "sample@aiacademy.jp", "aiacademy@gmail.com", "AI@gmail.com"}, columns=["email"])

mail_lists_b = pd.DataFrame({"test@aiacademy.jp", "sample@aiacademy.jp", "aiacademy@gmail.com", "AI@gmail.com"}, columns=["email"])

print(mail_lists_a)
print(mail_lists_b)

出力結果

                 email
0    test@aiacademy.jp
1  aiacademy@gmail.com
2         AI@gmail.com
3  sample@aiacademy.jp
                 email
0    test@aiacademy.jp
1  aiacademy@gmail.com
2         AI@gmail.com
3  sample@aiacademy.jp

pandasのDataFrameで「NOT IN」フィルターを実行するには、
~(チルダ)記号とisin()を用いることで実現できます。

# 2つのデータフレームの中から重複しないデータのみを抽出
mail_lists_a[~mail_lists_a["email"].isin(mail_lists_b["email"])]

~(チルダ)記号は、論理演算子notを意味します。

Pandasのisinを用いると、ある値がDataFrameやSeriesに存在すれば、「True」を返し、値が存在しない場合は「False」を返します。

つまり、mail_lists_aのメールアドレスの中から、mail_lists_bのメールアドレスに含まれないデータを抽出することができるプログラムになります。

もし逆に2つのデータフレームの中から重複するデータのみを抽出したい場合は、
~(チルダ)記号を消して以下のように書けば良いです。

# 2つのデータフレームの中から重複するデータのみを抽出
mail_lists_a[mail_lists_a["email"].isin(mail_lists_b["email"])]

Pythonを効率よく学ぶには?

Pythonを効率よく学ぶには、普段からPythonを利用している現役のデータサイエンティストや機械学習エンジニアに質問できる環境で学ぶことです。
質問し放題かつ、体系的に学べる動画コンテンツでデータ分析技術を学びたい方は、オンラインで好きな時間に勉強できるAI Academy Bootcampがオススメです。受講料も業界最安値の35,000円(6ヶ月間質問し放題+オリジナルの動画コンテンツ、テキストコンテンツの利用可能)なので、是非ご活用ください。

1 COMMENT

現在コメントは受け付けておりません。