web-dev-qa-db-ja.com

astype( 'category')。cat.codesによって割り当てられたラベルを知る方法は?

languageという次のデータフレームがあります

_         lang          level
0      english         intermediate
1      spanish         intermediate
2      spanish         basic
3      english         basic
4      english         advanced
5      spanish         intermediate
6      spanish         basic
7      spanish         advanced
_

を使用して、各変数を数値に分類しました

language.lang.astype('category').cat.codes

そして

language.level.astype('category').cat.codes

それぞれ。次のデータフレームを取得します。

_      lang   level
0      0       1
1      1       1
2      1       0
3      0       0
4      0       2
5      1       1
6      1       0
7      1       2
_

ここで、各値に対応する元の値を取得する方法があるかどうかを知りたいです。 lang列の_0_値が英語などに対応していることを知りたいのですが。

この情報を取得できる機能はありますか?

11
Marisa

辞書を生成できます:

c = language.lang.astype('category')

d = dict(enumerate(c.cat.categories))
print (d)
{0: 'english', 1: 'spanish'}

したがって、必要に応じてmapを実行できます。

language['code'] = language.lang.astype('category').cat.codes

language['level_back'] = language['code'].map(d)
print (language)
      lang         level  code level_back
0  english  intermediate     0    english
1  spanish  intermediate     1    spanish
2  spanish         basic     1    spanish
3  english         basic     0    english
4  english      advanced     0    english
5  spanish  intermediate     1    spanish
6  spanish         basic     1    spanish
7  spanish      advanced     1    spanish
6
jezrael

次のように.cat.categoriesインデックスを使用できます。

df.lang.cat.categories[0]

出力:

'english'
7
Scott Boston

カテゴリ型は因数分解のプロセスです。つまり、各一意の値またはカテゴリには、ゼロから始まる増加した整数値が与えられます。

例えば:

c = language.lang.astype('category')

あなたはコードを持っています

codes = c.cat.codes

そしてのカテゴリー

cats = c.cat.categories

Numpy配列のスライスを活用できるように設計されており、ラベルまたはカテゴリにアクセスできます

cats[codes]

Index(['english', 'spanish', 'spanish', 'english', 'english', 'spanish',
       'spanish', 'spanish'],
      dtype='object')

非常に効率的に検索するための構成がすでに与えられている場合、それを検索するために辞書を構成する必要はありません。


さらなる例として、これはpd.factorizeで複製する方法です

codes, cats = pd.factorize(language.lang)

print(cats, codes, cats[codes], sep='\n\n')

Index(['english', 'spanish'], dtype='object')

[0 1 1 0 0 1 1 1]

Index(['english', 'spanish', 'spanish', 'english', 'english', 'spanish',
       'spanish', 'spanish'],
      dtype='object')
1
piRSquared