1. ホーム
  2. python

[解決済み] Pandas: カテゴリを数値に変換する

2022-10-25 06:43:37

質問

例えば、以下のような国のデータフレームがあるとします。

cc | temp
US | 37.0
CA | 12.0
US | 35.0
AU | 20.0

国を'one-hot encodings'に変換するpd.get_dummies関数があることは知っています。しかし、私はそれらをインデックスに変換し、次のようなものを得たいと考えています。 cc_index = [1,2,1,3] 代わりに

私は、以下のようにnumpyのwhere句と一緒にget_dummiesを使用するよりも高速な方法があると仮定しています。

[np.where(x) for x in df.cc.get_dummies().values]

これはRで'factors'を使って行うのがいくらか簡単なので、pandasに似たようなものがあることを期待しています。

どのように解決するのですか?

まず、カラムの種類を変更します。

df.cc = pd.Categorical(df.cc)

これで、データの見た目は似ていますが、カテゴリ別に保存されるようになりました。 カテゴリコードを捕捉するために

df['code'] = df.cc.cat.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').cat.codes

または、カテゴリカラムをインデックスとして使用します。

df2 = pd.DataFrame(df.temp)
df2.index = pd.CategoricalIndex(df.cc)