我想将 df['SCORES'] 中的分数分入名为 df['Remark'] 的新列中的 4 个分箱,如下面的代码所示(右)下表中的大部分列)。
但是,使用 qcut 方法,这会以 1/4 间隔均匀分布这些分数(我们在下面的代码中指定这一点)
df['Remark'] = pd.qcut(df['SCORE'],4,labels = ['Bad','Fair','Good','Excellent'])
在这种情况下,出现“Bad”备注的唯一原因是列 df['banned'] 或 df['charged']为真 = 1。
是否可以使用代码自动对模型进行编程,以将具有禁止或收费字段的任何用户分配为1并带有不良评论,然后,其余用户具有非禁止或非收费字段,然后除以 pd.qcuit(df['SCORE'],3)
的剩余记录?
User banned charged score **remark**
Sam 1 0 0 Bad
Rob 0 0 23 Fair
Tom 0 0 54 Good
Kim 0 1 65 Bad
Nik 0 0 99 Excellent
Leo 1 1 3 Bad
最佳答案
对“好”数据应用三向剪切:
not_bad_mask = (df['banned'] == 0) & (df['charged'] == 0)
df['remark'] = pd.qcut(df[not_bad_mask]['score'], 3,
labels = ['Fair', 'Good', 'Excellent'])
然后将另一个类别添加到类别列表中:
df['remark'].cat.add_categories(['Bad'], inplace=True)
并填补空白:
df['remark'].fillna('Bad', inplace=True)
关于python qcut方法对分数进行分箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68108409/