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
_値が英語などに対応していることを知りたいのですが。
この情報を取得できる機能はありますか?
辞書を生成できます:
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
次のように.cat.categoriesインデックスを使用できます。
df.lang.cat.categories[0]
出力:
'english'
カテゴリ型は因数分解のプロセスです。つまり、各一意の値またはカテゴリには、ゼロから始まる増加した整数値が与えられます。
例えば:
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')