在Pandas中使用factorize覆盖缺失案例时设置apriori级别

时间:2014-11-17 03:52:51

标签: python pandas levels categorical-data

我理解如何使用因子分解将因子的级别(例如“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个不同级别的事实,并将正确的数值映射到正确的级别。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

使用Categorical

这样的话肯定是可以的
outcome_cat = pd.Categorical(
    first_df['outcome'], 
    categories=['L', 'W', 'D'], ordered=False
)

Categorical的语义可能与pd.factorize()的输出不完全相同,但codes属性将您的数据包含为数值,只是{{1} }}也知道未观察到的Categorical值:

'D'