Python pandas十分位分组后按5分递增规则赋值分数方法
实现方法
你当前调用pd.qcut时传入labels=False,生成的decile列是取值为0~9的整数,其中0对应最低十分位、9对应最高十分位,和你要求的赋分规则完全匹配,直接做简单算术运算即可完成赋值:
# 基于已生成的decile列计算分数 df['score'] = (df['decile'] + 1) * 5
运算后最低十分位(decile=0)得分为(0+1)*5=5,最高十分位(decile=9)得分为(9+1)*5=50,每档刚好递增5分,完全符合规则要求。
如果你不需要保留中间的decile分位列,也可以在分箱时直接传入自定义标签一步完成,不需要后续计算:
# 直接生成分数列,无需单独创建decile列 df['score'] = pd.qcut( df['column'], q=10, labels=[5,10,15,20,25,30,35,40,45,50] )
注意事项
pd.qcut默认按列值从小到大排序分箱,和你“值越低所属分位越低、赋分越低”的逻辑完全一致,不需要额外调整排序规则- 如果真实数据存在大量重复值导致分箱边界冲突,可以在
qcut中加入参数duplicates='drop'避免运行报错
内容的提问来源于stack exchange,提问作者Daven1
相关产品推荐
相关产品推荐

