pandas 如何在qcut后添加新的分类变量?

wnavrhmk  于 2023-01-28  发布在  其他
关注(0)|答案(2)|浏览(120)

我创建了一个分类变量,并希望为其他变量的特定值创建一个新类别
我有一个包含变量Score的 Dataframe ,该变量的取值范围为0-100。我对它进行了十分位数处理,但我想为特定值创建一个新类别

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

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

我希望所有具有Score=1的用例都有一个新的类别0,但我收到了以下消息:
无法在具有新类别的分类中设置项目,请先设置类别

h6my8fg2

h6my8fg21#

这个错误简单地说,你需要在给它分配东西之前设置类别。所以,创建它。这里有一个到文档的链接。
由于您没有提供输出,我不知道这是否是您要查找的内容,但我认为这就是它。

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)
r7xajy2e

r7xajy2e2#

至少在现代的pandas版本中,可以在一行(长)中先订购新值:

# Add '0' as a category value:
df['Score_pr'] = df['Score_pr'].cat.add_categories('0')
# Order it before the other values:
df['Score_pr'] = df['Score_pr'].cat.reorder_categories(np.roll(df['Score_pr'].cat.categories, 1))

相关问题