我了解如何使用分解系数将因子的水平(例如“ 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)

10-08 08:48