pandasでmulti-hot encodingする

pivot_tableに関しては以下参照しています

datascience.stackexchange.com

やりたいこと

以下のようにpandasでlistとして保持しているカテゴリー値を

以下のようにmulti-hot encodingしたい

f:id:nnkkmto:20210511195413p:plain

やり方

全体処理

以下のように、一度listを展開し、pivot_tableで集約し直すことで上記変換が可能です。

# listを展開する
df = df.explode("genre")

# multi-hot化
df = df.pivot_table(index=['movie_id'], columns=['genre'], aggfunc=[len], fill_value=0)

# multi-levelになってるカラムなどを削除
df = df.rename_axis([None, None], axis=1)
df.columns = df.columns.droplevel()
df = df.reset_index()

各処理

各処理を細かくみていくと、以下になります

df

# listを展開する
df = df.explode("genre")
df

# multi-hot化
df = df.pivot_table(index=['movie_id'], columns=['genre'], aggfunc=[len], fill_value=0)
df

f:id:nnkkmto:20210511195546p:plain

# multi-levelになってるカラムなどを削除
df = df.rename_axis([None, None], axis=1)
df.columns = df.columns.droplevel()
df = df.reset_index()

f:id:nnkkmto:20210511195607p:plain