如何在 qcut 之后在分类变量中添加新类别?

Mar*_*ina 8 python pandas

我创建了一个分类变量,我想为其他变量的特定值创建一个新类别

我有一个数据框,其中的变量的Score值范围为 0-100。我做了十分之一,但我想为特定值创建一个新类别

df['Score_pr']=pd.qcut(df['Score'] ,10,duplicates='drop')

df.loc[X_n['Score']==1,'Score_pr']='0'
Run Code Online (Sandbox Code Playgroud)

0我期望所有案例都有一个新类别,Score=1 但我收到了以下消息:

无法在具有新类别的类别上设置项目,请先设置类别

IMC*_*ins 9

该错误字面意思是您需要先设置类别,然后再为其分配内容。所以,创建它。这是文档的链接。

由于您没有提供输出,我不知道这是否是您正在寻找的内容,但我认为就是这样。

df = pd.DataFrame({'Score': [1, 2, 3,4,5,6]*100})
print(df.head())
#      Score
# 0      1
# 1      2
# 2      3
# 3      4
# 4      5
df['Score_pr'] = pd.qcut(df['Score'] , 10, duplicates='drop')
print(df.head())
#      Score      Score_pr
# 0      1  (0.999, 2.0]
# 1      2  (0.999, 2.0]
# 2      3    (2.0, 3.0]
# 3      4    (3.5, 4.0]
# 4      5    (4.0, 5.0]
df['Score_pr'] = df['Score_pr'].cat.add_categories('0')
df.loc[df['Score']==1,'Score_pr']='0'
print(df.head())
#      Score      Score_pr
# 0      1             0
# 1      2  (0.999, 2.0]
# 2      3    (2.0, 3.0]
# 3      4    (3.5, 4.0]
# 4      5    (4.0, 5.0]
Run Code Online (Sandbox Code Playgroud)

如果您想重新排序以使“0”成为第一个类别......

cat = df['Score_pr'].cat.categories.tolist()
cat = cat[:-1]
cat.insert(0, '0')
series = pd.Series(cat)
df['Score_pr'] = df['Score_pr'].cat.reorder_categories(series)
Run Code Online (Sandbox Code Playgroud)