我有一堆数据框,其中一个类别列定义了性别(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。是否有一种简单的方法将特定的整数分配给类别?
答案 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.Categorical
比astype('category')
。
答案 2 :(得分:0)
您也可以将lambda与apply一起使用:
df4['sex'] = df4['sex'].apply(lambda x : 1 if x=='M' else 2)