pandasでmulti-hot encodingする
pivot_tableに関しては以下参照しています
やりたいこと
以下のようにpandasでlistとして保持しているカテゴリー値を
以下のようにmulti-hot encodingしたい
やり方
全体処理
以下のように、一度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
# multi-levelになってるカラムなどを削除 df = df.rename_axis([None, None], axis=1) df.columns = df.columns.droplevel() df = df.reset_index()