python - 如何将相同的 cat.codes 应用于 2 个不同的数据帧?

标签 python pandas dataframe categorical-data

我有 2 个数据帧 X_trainX_test。这两个数据框具有相同的列。

有 1 个名为 levels 的列需要从 str 更改为 int。但是,每个数据帧的 levels 列都有不同的唯一值:

X_train 具有:['Level 0'、'Level 10'、'Level 30'] 作为唯一值。

X_test 具有:['Level 20', 'Level 40'] 作为唯一值。

目标是 1) 合并来自 X_trainX_test 的唯一值,然后 2) 将 cat.codes 应用于两者数据框,以便它们保持一致。我该怎么做呢?基本上,应用于两个数据帧的 cat.codes 如下,即使 1 个数据帧可能没有另一个数据帧具有的值:

{0: 'Level 0', 1: 'Level 10', 2: 'Level 20', 3: 'Level 30', 4: 'Level 40'}

现在我只有以下内容,但我不确定如何获取两个 cat.codes 的唯一值。

X_train['levels'] = X_train['levels'].astype('category').cat.codes
X_test['levels'] = X_test['levels'].astype('category').cat.codes

最佳答案

使用CategoricalDtype来控制代码:

lst = sorted(set(X_train['levels'].dropna().unique())
             | set(X_test['levels'].dropna().unique()))
lvl = pd.CategoricalDtype(lst, ordered=True)

X_train['codes'] = X_train['levels'].astype(lvl).cat.codes
X_test['codes'] = X_test['levels'].astype(lvl).cat.codes

输出:

>>> X_train
     levels  codes
0   Level 0      0
1  Level 10      1
2  Level 30      3

>>> X_test
     levels  codes
0  Level 20      2
1  Level 40      4
2       NaN     -1

关于python - 如何将相同的 cat.codes 应用于 2 个不同的数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75608033/

相关文章:

python - 更改函数以返回整列

python - Teamcity 消息 unittest 在 Python 2 中看不到测试

python - 在图例中使用 pandas.DataFrame.plot 的临时标签

python - 重命名 pandas 数据框的第一行

Python 和 set() 操作 ... & 和 ^

python - 如何从其他两列之间的列中获取数据框的行?

r - 选择某些(未知)索引之间的行

python - Pandas - 如何使用带有索引的字典对列的行进行排序

python - 通过检查连续元素来切片数据帧

python - 如何将多索引 DataFrame 转换为嵌套字典结构?