Python 用 0-x 索引替换列值(对于 xgboost)

Python replacing column values with 0-x indexes (for xgboost)

我正在使用 python(与 pandas 等) 我有一个带有标签列的数据框(类 a、b、c 等 - 总共 38 个)。 我想使用 Xgboost 进行预测,但它只适用于 0:num_classes 范围内的标签。

所以基本上我需要: - 用 0:num_class 索引替换标签列中的所有值(a 为 0,b 为 1,c 为 2 等)

类的个数是38个,无法手动映射替换。 有没有一种优雅的方法可以做到这一点? (在 R 中我会使用:

train_data$Class <- as.numeric(factor(train_data$Class))

但是这里不行

您可以使用 pandas.factorize 函数:

import pandas as pd
df.Class = pd.factorize(df.Class)[0]

如果你想要向后,你可以存储那个变量然后重新分配它:

factor = pd.factorize(df.Class)
# forward
df.Class = factor[0]
# backward
df.Class = factor[1]

对于简单的转换,您可以在数据框上使用 map 方法,

df.class
Out[34]: 
1    a
2    b
3    c
4    c
5    b
6    a
Name: 0, dtype: object

df.class.map({'a':1,'b':2,'c':3})
Out[35]: 
1    1
2    2
3    3
4    3
5    2
6    1
Name: 0, dtype: int64
labels = ['a','b','a','c','b','a','c','a']
y = pandas.Series(labels)
unique_labels, y_inversed = numpy.unique(y, return_inverse=True)
print list(unique_labels[y_inversed]) == labels

结果: 真