python - 对数字列表进行排名

标签 python scipy

我有一个列表:

 somelist = [500, 600, 200, 1000]

我想生成该列表的排名顺序:

 rankorderofsomelist = [3, 2, 4, 1]

some complex solutions ,但是有没有人有什么简单的方法呢?

最佳答案

由于您已将此问题标记为 scipy,您可以使用 scipy.stats.rankdata :

>>> rankdata(somelist)
array([ 2.,  3.,  1.,  4.])
>>> len(somelist) - rankdata(somelist)
array([ 2.,  1.,  3.,  0.])
>>> len(somelist) - rankdata(somelist) + 1
array([ 3.,  2.,  4.,  1.])

真正的优势是您可以指定如何处理极端情况:

>>> rankdata([0,1,1,2])
array([ 1. ,  2.5,  2.5,  4. ])
>>> rankdata([0,1,1,2], method='min')
array([ 1,  2,  2,  4])
>>> rankdata([0,1,1,2], method='dense')
array([ 1,  2,  2,  3])

关于python - 对数字列表进行排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28800917/

相关文章:

python - Flask 渲染以前版本的 CSS

python - try/except if/else - 如何替换 'None' 输出

python - 估计两个时间序列之间的小时间偏移

python日志n选择k

python-3.x - 相当于 pandas.shift() 函数的 numpy 数组?

Python 3.1 RSS 解析器?

python - 在嵌入非常大的图像时,您能否减少 ReportLab 的内存消耗,或者是否有一个 Python PDF 工具包可以?

python - 将 Django 1.5.4 连接到 Mamp MySQL - 无法连接到本地服务器

python - 如何在 numpy/scipy 中实现像素数学

python - 提取矩阵的可变列数