次のような国に関するデータフレームがあるとします。
cc | temp
US | 37.0
CA | 12.0
US | 35.0
AU | 20.0
国を「ワンホットエンコーディング」に変換する pd.get_dummies 関数があることは知っています。ただし、代わりに取得できるようにインデックスに変換したいと考えていますcc_index = [1,2,1,3]
。
以下に示すように、get_dummies を numpy where 句と一緒に使用するよりも速い方法があると思います。
[np.where(x) for x in df.cc.get_dummies().values]
これは、R で「因子」を使用するとやや簡単に実行できるので、pandas にも同様の機能があることを期待しています。
ベストアンサー1
まず、列のタイプを変更します。
df.cc = pd.Categorical(df.cc)
データは似ていますが、カテゴリ別に保存されています。カテゴリ コードを取得するには:
df['code'] = df.cc.codes
これで次のようになります:
cc temp code
0 US 37.0 2
1 CA 12.0 1
2 US 35.0 2
3 AU 20.0 0
DataFrame を変更せずにコードを取得するだけの場合は、次のようにします。
df.cc.astype('category').codes
または、カテゴリ列をインデックスとして使用します。
df2 = pd.DataFrame(df.temp)
df2.index = pd.CategoricalIndex(df.cc)