EnsekiTT Blog

EnsekiTTが書くブログです。

PandasのDataFrameでカテゴリを各カテゴリ毎のTrue/False列に展開した話

つまりなにしたの?

PandasのDataFrameで
例えば
「曜日の入った列があった時に、月曜日フラグ列、火曜日フラグ列、…に展開する」
みたいなことをやった。
ユニークなパラメータごとにフラグ列を作るといえばいいのかな。
ベストプラクティスかはわからないけど僕はよくやるやり方をPandasの小ネタとして紹介する。
f:id:ensekitt:20171103013512j:plain


これを最初やろうとした時、検索クエリがわからなくて苦労した。
Pandas不慣れなのでもっといい方法あったらコメントとかコメント付きツイートとかリプライください!

Pandas

Pythonでデータ分析をやるならこれ!っていうレベルのパッケージ。
DataFrameはできることが多いけど多すぎて知らないと使いこなせなくてとっつきにくい。
使ってると指数関数的に便利になっていく感覚に陥る(諸説ある)
pandas: powerful Python data analysis toolkit — pandas 0.21.0 documentation

この辺を試しつつ、最初不便に感じても負けずに使っていると、いつの間にか抜け出せなくなってた。
qiita.com

入力と出力

いまいち今日紹介しようと思って内容が伝わりにくいと思うので、変換前と変換後を提示する。
f:id:ensekitt:20171103013512j:plain
*1

処理の方針

  • カテゴリが入った系列を用意する
  • ユニークなカテゴリを抽出する
  • もとの系列にユニークなカテゴリ名を入れた列を作る
  • ユニークなカテゴリ名をいれた列にTrue/Falseの値を入れる

やってみた

import pandas as pd

# カテゴリが入った系列を用意する(ここでは曜日にした)
dotw = ['月', '火', '水', '木', '金', '土', '日', '月', '火', '水', '木', '金', '土', '日']
dotw_df = pd.DataFrame({'dotw' :dotw})

# ユニークなカテゴリ名を抽出してFor文にした
for day in dotw_df.dotw.unique():
    # もとの系列にユニークなカテゴリ名を入れた列を作る
    # ユニークなカテゴリ名を入れた列にTrue/Falseの値を入れる
    dotw_df['dotw_'+day] = (dotw_df.dotw == day)
dotw_df

実行結果付きのNotebookはこちら
github.com

おわりに

Pandas楽しい。
データマイニングやっている大学の後輩がPandasよく使うらしいので、次、行き詰った相談してみる。

*1:再掲