You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何将mean_v列排名分为0-2三类生成rank_0-2新列

解决方案

你可以根据实际分类逻辑选择以下两种实现方式:

方案1:基于dense排名截断(排名最高的为0,次高为1,其余所有为2)

在你原有代码的基础上调整即可,先把排名起始值从1转为0,再截断最大值为2:

# 原有dense排名逻辑不变,减1把起始值从1调整为0,再用clip限制最大值为2
df['rank_0-2'] = df.mean_v.rank(method='dense', ascending=False).astype(int) - 1
df['rank_0-2'] = df['rank_0-2'].clip(upper=2)

对应你的示例数据运行结果如下:

mean_vrank_0-2
02
0.007872
1.007870
0.2222222222222222
0.2777777777777772
0.3636363636363632
0.007872
1.007870
0.2222222222222222
0.41

方案2:按分位数三等分(数值前1/3为0,中间1/3为1,后1/3为2)

如果需要把所有数据按数值大小平均分为三类,使用分箱方法实现:

# qcut按分位数拆为3组,降序排列下数值越大分类值越小
df['rank_0-2'] = pd.qcut(df['mean_v'], q=3, labels=[2,1,0]).astype(int)

内容的提问来源于stack exchange,提问作者AmberBahia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:18:03