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

ArcGIS Pro脚本实现重复值同排名并维持序列的排名需求

ArcGIS Pro工具箱脚本:重复值相同排名的实现

在ArcGIS Pro工具箱脚本开发中,需要基于数值分配递增排名,要求重复数值分配相同排名,同时维持整体序列的连续性(即重复值占用对应位次,后续排名跳过重复的位次)。

错误结果

数值排名
4001
5002
1753
2504
1205
2506

期望的正确结果

数值排名
5001
4002
2503
2503
1755
1206

当前未处理重复值的代码

d = {'value': [500,120,175,400,250,250], 'rank': [0,0,0,0,0,0]}
df = pd.DataFrame(data=d)

rank1 = df['value']
rank1 = rank1.sort_values(ascending=False)
rank1 = rank1.to_numpy()
rank2 = np.arange(1,len(rank1)+1,1)

当前输出

rank1: [500 400 250 250 175 120] rank2: [1 2 3 4 5 6]

期望输出

rank2: [1 2 3 3 5 6]

解决方案

直接利用pandas的rank()方法,指定method='min'即可实现重复值分配相同排名,且后续排名跳过重复位次的需求:

d = {'value': [500,120,175,400,250,250], 'rank': [0,0,0,0,0,0]}
df = pd.DataFrame(data=d)

# 计算排名,ascending=False表示降序排列,method='min'让重复值取最小排名
df['rank'] = df['value'].rank(ascending=False, method='min').astype(int)

# 按value降序查看结果
sorted_df = df.sort_values('value', ascending=False)
print("rank1:", sorted_df['value'].to_numpy())
print("rank2:", sorted_df['rank'].to_numpy())

代码说明

  • ascending=False:按数值从大到小排名,匹配最高值排第1位的需求
  • method='min':对重复数值分配它们对应的最小排名,后续排名自动跳过重复值占用的位次(如两个250都排第3,下一个数值直接排第5)
  • astype(int):将浮点型的排名结果转为整数,和期望输出格式一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 12:34:56