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

Numpy是否有类似Pandas rank的函数?如何实现数组百分位排名

用Numpy实现数组的百分位排名(替代Pandas rank)

核心结论

Numpy没有直接对应Pandas rank(pct=True)的内置函数,但可以通过组合Numpy的基础函数实现完全等价的功能,且运行效率更高,适合循环场景。

Pandas rank(pct=True)的逻辑

默认采用average排名规则:

  • 对数组排序后,相同值的元素取它们的平均排名(1-based)
  • 将排名值除以数组总长度,得到0到1之间的百分位排名

纯Numpy实现代码

以下代码与你提供的Pandas实现完全等价:

import numpy as np

# 生成测试数组
arr = np.random.random(500)

# 实现百分位排名(average规则)
sorted_arr = np.sort(arr)
left_idx = np.searchsorted(sorted_arr, arr, side='left')
right_idx = np.searchsorted(sorted_arr, arr, side='right')

# 计算1-based平均排名,转换为百分位排名
average_rank = (left_idx + right_idx + 1) / 2
percentile_rank = average_rank / arr.size

# 若需要和Pandas输出一致的二维数组格式
desired_output = percentile_rank.reshape(-1, 1)

其他排名规则的实现

如果需要调整排名规则,只需修改排名计算逻辑:

  • min排名:percentile_rank = (left_idx + 1) / arr.size
  • max排名:percentile_rank = right_idx / arr.size

效率优势

纯Numpy实现避免了Pandas DataFrame的额外开销,在长循环中会比原Pandas代码快数倍,尤其适合小规模数组的高频循环场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:10:26