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

时间:2019-01-29 13:53:12

标签: python pandas

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

我有一个带有变量Score的数据帧,该变量的取值范围为0-100。我确实从中解脱出来,但我想为特定值创建一个新类别

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

df.loc[X_n['Score']==1,'Score_pr']='0'

对于所有有0的情况,我希望有一个新的类别Score=1 但我收到此消息:

  

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

1 个答案:

答案 0 :(得分:0)

该错误表示您需要先设置类别,然后再为其分配内容。因此,创建它。这是指向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)