我了解如何使用分解系数将因子的水平(例如“ L”和“ W”(用于获胜和失败))编码为数值,例如“ 0”和“ 1”:
import pandas as pd
first_df = pd.DataFrame({'outcome': ["L", "L", "W", "W"]})
pd.factorize(first_df['outcome'])
以上返回
(array([0, 0, 1, 1]), array(['L', 'W'], dtype=object))
。但是,稍后,我想将此结果与其他一些结果结合起来,在这里我们有了一个新的结果,即平局(“ D”),这里的情况变得很棘手:
second_df = pd.DataFrame({'outcome': ["L", "L", "D", "D"]})
pd.factorize(second_df['outcome'])
这将返回
(array([0, 0, 1, 1]), array(['L', 'D'], dtype=object))
我需要某种方法来抢先声明在创建数据框时存在3个不同级别的事实,并将正确的数值映射到正确的级别。我该如何实现?
最佳答案
使用Categorical
这样的事情绝对是可能的:
outcome_cat = pd.Categorical(
first_df['outcome'],
categories=['L', 'W', 'D'], ordered=False
)
Categorical
的语义可能与pd.factorize()
的输出不完全相同,但是codes
属性包含数据作为数值,只是Categorical
也知道未观察到的'D'
值:outcome_cat.codes
Out[6]: array([0, 0, 1, 1], dtype=int8)