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

AI・データサイエンス、
機械学習の実践力を高めたい方へ

  • プログラミングを0から学びたい
  • データサイエンティスト、データ
    アナリストを目指したい
  • AIエンジニア、大規模言語モデル(LLM)エンジニアを目指したい

AI人材コースを無料体験してみませんか?

  • 無料で120以上の教材を学び放題!
  • Pythonやデータ分析、機械学習など
    AI人材に必須のスキルを無料体験できる!
  • データ分析、AI開発の一連の流れを体験、実務につながる基礎スキルを習得!

1分で簡単!無料!

無料体験して特典を受け取る

「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ヶ月間質問し放題+オリジナルの動画コンテンツ、テキストコンテンツの利用可能)なので、是非ご活用ください。



  • 30時間以上の動画講座が見放題!
  • 追加購入不要!
    これだけで学習できるカリキュラム
  • (質問制度や添削プラン等)
    充実したサポート体制!

1分で簡単!無料!

AI人材コースを見る



無料体験して特典を受け取る

1 COMMENT

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