我理解如何使用因子分解将因子的级别(例如“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个不同级别的事实,并将正确的数值映射到正确的级别。我怎样才能做到这一点?
答案 0 :(得分:2)
使用Categorical
:
outcome_cat = pd.Categorical(
first_df['outcome'],
categories=['L', 'W', 'D'], ordered=False
)
Categorical
的语义可能与pd.factorize()
的输出不完全相同,但codes
属性将您的数据包含为数值,只是{{1} }}也知道未观察到的Categorical
值:
'D'