【Python】データフレームで1が入っている列を判定して結果を一列に集約する
概要
Pythonのデータフレームのget_dummiesの結果のような横持のデータがあった場合に、どの列に1が入っているかを判定して結果を一列にまとめる方法について考えてみました。
検証データ
以下のように3つのカラムA, B, Cにそれぞれ1か0が入っているデータを用意します。
import pandas as pd
df = pd.DataFrame([[1,1,0],[0,0,1],[1,0,1]],columns = ['A','B','C'])
df.head()
目標とするのは、各行ごとにどの列に1が入っているかを判定し、結果を一列で表現することです。
実現するコード
df['judge'] = ''
for c in df.columns:
df.judge[df==1]=df.judge + c
df.head()
方式としては、最初に df[‘judge’] = ” によって判定用の列を追加します。
その後、列名毎にイテレーションで 1となっている行を抽出した上で、該当行のjudge列に列名を追加していくという方法です。
この処理を行うことにより、いちいち全部の列を確認せずとも、judge列だけみればどの列に1が入っているかが分かりますので便利です。
なお、judge列のデータの桁数を揃えたい場合はアンダースコアなどを入れていくのも良いと思います。
import pandas as pd
df = pd.DataFrame([[1,1,0],[0,0,1],[1,0,1]],columns = ['A','B','C'])
df['judge'] = ''
for c in df.columns:
df.judge[df==1] = df.judge + c
df.judge[df==0] = df.judge + '_'
df.head()