将分类列转换为特定整数

时间:2019-01-13 02:00:15

标签: python pandas

我有一堆数据框,其中一个类别列定义了性别(M / F)。我想将整数1分配给Male,将2分配给Female。我有以下代码将cat分别编码为0和1

df4["Sex"] = df4["Sex"].astype('category')
df4.dtypes
df4["Sex_cat"] = df4["Sex"].cat.codes
df4.head()  

但是我特别需要将M设为1,将F设为2。是否有一种简单的方法将特定的整数分配给类别?

3 个答案:

答案 0 :(得分:2)

IIUC:

df4['Sex'] = df4['Sex'].map({'M':1,'F':2})

现在:

print(df4)

将是理想的结果。

答案 1 :(得分:1)

如果您需要施加特定的顺序,则可以使用pd.Categorical

c = pd.Categorical(df["Sex"], categories=['M','F'], ordered=True)

这确保为“ M”赋予最小值,为“ F”赋予下一个最小值,依此类推。然后,您只需访问codes并添加1。

df['Sex_cat'] = c.codes + 1

如果要更好地控制为哪些类别分配了哪些代码,最好使用pd.Categoricalastype('category')

答案 2 :(得分:0)

您也可以将lambda与apply一起使用:

df4['sex'] = df4['sex'].apply(lambda x : 1 if x=='M' else 2)