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

如何对Python DataFrame子集按Price排名并重新分配Position值

解决方案

方法一:基于排名线性映射到0-9范围

如果需要将每个Price的排名按比例缩放到0-9的整数(最低Price对应0,最高对应9),按以下步骤操作:

  1. 生成Side=1行的布尔筛选掩码:

    mask = d['Side'] == 1
    
  2. 对筛选出的Price列做升序排名(1起始),转换为0起始的排名:

    rank_0based = d.loc[mask, 'Price'].rank(ascending=True) - 1
    
  3. 将0起始排名线性映射到0-9整数范围,最后转成整数类型:

    max_rank = rank_0based.max()
    d.loc[mask, 'Position'] = (rank_0based / max_rank * 9).astype(int)
    

    注:若所有Price值完全相同,会出现除以0的情况,可提前判断处理。

方法二:分箱为10个等级(0-9)

如果需要将Price从低到高均匀划分成10个等级,最低等级为0、最高为9,用pd.qcut更直接:

mask = d['Side'] == 1
# 按Price切割为10个区间,对应标签0到9
d.loc[mask, 'Position'] = pd.qcut(d.loc[mask, 'Price'], q=10, labels=range(10))

注:若Price存在大量重复值导致无法均分10个区间,可添加duplicates='drop'参数调整分箱逻辑。

验证结果

可通过以下代码查看更新后的目标子集:

print(d[d['Side'] == 1][['Price', 'Position']])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 04:17:46