我使用python(使用pandas等) 我有一个带有标签列的数据框(类a,b,c等 - 总共38个)。 我想使用Xgboost进行预测,但它仅适用于0:num_classes范围内的标签。
基本上我需要: - 用0:num_class索引替换label列中的所有值(a为0,b为1,c为2等)
类的数量是38,因此无法手动映射和替换。 有一种优雅的方式来做到这一点? (在R中我会使用:
train_data$Class <- as.numeric(factor(train_data$Class))
但它在这里不起作用。
答案 0 :(得分:2)
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
结果: 真
答案 1 :(得分:1)
您可以使用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]
答案 2 :(得分: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