我创建了一个分类变量,我想为其他变量的特定值创建一个新类别
我有一个带有变量 Score
的数据框,其值介于 0-100 之间。我做了十分之一,但我想为特定值创建一个新类别
df['Score_pr']=pd.qcut(df['Score'] ,10,duplicates='drop')
df.loc[X_n['Score']==1,'Score_pr']='0'
我希望所有具有 Score=1
的案例都有一个新类别 0
但我收到了这样的消息:
Cannot setitem on a Categorical with a new category, set the categories first
该错误字面意思是您需要先设置类别,然后再为其分配内容。所以,创建它。这是doc的链接.
由于您没有提供输出,我不知道这是否是您正在寻找的内容,但我认为就是这样。
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]
如果您想重新排序以使“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)
我是一名优秀的程序员,十分优秀!