pandasで2つのデータフレームのカラム名の差分集合、共通集合、和集合を調べる方法

pandas_logo pandas
スポンサーリンク

こんにちは。カルークです。

今回は2つのデータフレームのカラム名の差分を調べる方法についてまとめます。他にも、共通集合(AND)や和集合(OR)を調べる方法についても記述します。

方法は色々とあるかと思いますが、今回は以下のような流れで行きたいと思います。

  1. データフレームに対してkeys()を適用しカラム一覧を取得
  2. それにset()を適用しpythonのset型にして、集合演算で求める

スポンサーリンク

実行環境

今回の実行環境は以下になります。

  • OS: Windows 10 Pro (64-bit)
  • Anaconda: conda version 4.9.2
  • Python: 3.8
  • 実行環境: jupyter notebook
  • pandas: 1.2.3

用いるデータ

以下のような2種類のデータフレームを定義します。

import pandas as pd

df_a = pd.DataFrame({
    "name": ["suzuki", "tanaka", "sato"],
    "address": ["Tokyo", "Ibaraki", "Kanagawa"],
    "hobby": ["soccor", "tennis", "soccor"]
})

df_b = pd.DataFrame({
    "name": ["suzuki", "tanaka", "sato"],
    "favorite_food": ["Strawberry", "Banana", "Poteto"]
})

それぞれ、こんな感じのデータです。

カラム名をset集合にする方法

以下のように、データフレームに対してkeys()でカラム一覧を取得し、それをsetで括るとset集合になります。

set(df_a.keys())
# 出力
{'address', 'hobby', 'name'}

set(df_b.keys())
# 出力
{'favorite_food', 'name'}

以上のようにして、データフレームのカラム名をset集合として表す事ができます。

ちなみに、データフレームのcolumnsを用いてもカラム一覧を取得できるので、同じ事が実現できます。

set(df_a.columns)
# 出力
{'address', 'hobby', 'name'}

set(df_b.columns)
# 出力
{'favorite_food', 'name'}

2つのデータフレームのカラム名の差分を調べる

まずはカラム名の差分です。setの引き算を計算することで差分を求めます。

df_aにはあって、df_bにないカラム

set(df_a.keys()) - set(df_b.keys())
# 出力
{'address', 'hobby'}

df_bにはあって、df_aにないカラム

set(df_b.keys()) - set(df_a.keys())
# 出力
{'favorite_food'}

2つのデータフレームのカラム名の和集合(OR)を調べる

同じ要領で、和集合も求めることができます。

set(df_a.keys()) | set(df_b.keys())
# 出力
{'address', 'favorite_food', 'hobby', 'name'}

2つのデータフレームのカラム名の共通集合(AND)を調べる

同じ要領で、共通集合も求めることができます。

set(df_a.keys()) & set(df_b.keys())
# 出力
{'name'}

まとめ

ここでは、2つのデータフレームのカラム名の差分を調べる方法についてまとめました。他にも、カラム間の共通集合(AND)や和集合(OR)を調べる方法についても記載しました。

今回は2つのデータフレームのみを用いましたが、3つ、4つ、…とデータフレームが増えても同じように計算することが出来ます。

タイトルとURLをコピーしました