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

时间:2015-11-09 05:34:08

标签: python pandas xgboost

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

但它在这里不起作用。

3 个答案:

答案 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