pandas 如何将相同的www.example.com应用cat.codes于2个不同的 Dataframe ?

cld4siwp  于 2023-03-06  发布在  其他
关注(0)|答案(1)|浏览(137)

我有2个 Dataframe X_trainX_test。这2个 Dataframe 具有相同的列。
有一个名为levels的列需要从str更改为int。但是,每个 Dataframe 的levels列具有不同的唯一值:
X_train具有:[“级别0”、“级别10”、“级别30”]作为唯一值。
X_test具有:[“级别20”,“级别40”]作为唯一值。
目标是1)合并来自X_trainX_test的唯一值,然后2)将cat.codes应用于两个 Dataframe ,使它们保持一致。我该如何做?基本上,应用于两个 Dataframe 的cat.codes将如下所示,即使一个 Dataframe 可能没有另一个 Dataframe 所具有的值:

{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
oaxa6hgo

oaxa6hgo1#

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

相关问题