我了解如何使用分解将因子的级别(例如“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)
关于python - 在 Pandas 中使用因式分解来覆盖缺失情况时设置先验级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26965246/