python - 在 Pandas 中使用因式分解来覆盖缺失情况时设置先验级别

标签 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 个不同级别的事实,并将正确的数值映射到正确的级别。我怎样才能实现这个目标?

最佳答案

使用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/

相关文章:

python - html 和 sql 与 python

python - 在 Python 中使用 sklearn.preprocessing 进行数据转换

python - 数据透视表和合并列与标题

r - 将因子重新调整为默认顺序时出现问题吗?

python - 在 RTSP 设置后接收 RTP 数据包

python - 将 matplotlib 子图排列到子网格中

将 R 中的数据集重新格式化为行作为级别,列作为范围

r - 创建一个具有更多级别的因子,默认情况下在 R 中使用

python-2.7 - 使用 Python 代码(在 Linux 中)读取 excel 列并获取公式值

python - Pandas:如何用 groupby 的平均值填充空值?