【发布时间】:2015-09-30 14:37:46
【问题描述】:
我有以下元组列表:
[(1, 6), (2, 3), (2, 5), (2, 2), (1, 7), (3, 2), (2, 2)]
我想按元组中的第一个值对该列表进行排名,并按第二个值解析平局,因此输出如下所示:
[1, 5, 6, 3, 2, 7, 3]
我想不出一个简单的方法来做到这一点,所以我一直在寻找类似scipy.stats.rankdata 函数的东西。但是,对于我的用例,它缺少 numpy.argsort 中的 order 参数之类的东西。我觉得我在这里遗漏了一些明显的东西,在这种情况下,我很抱歉没有更好地搜索我的答案!
编辑:
为了更好地解释我想要实现的目标:
给定一个元组列表
>>> l = [(1, 6), (2, 3), (2, 5), (2, 2), (1, 7), (3, 2), (2, 2)]
我想创建一个列表,其中包含列表 l 中元素的排名。例如,按每个元组中的第一个值排序:
>>> from scipy import stats
>>> stats.rankdata([i for i, j in l], method='min')
array([ 1., 3., 3., 3., 1., 7., 3.])
这几乎是我想要的,但是列表中有关系(有两次 1. 和四次 3.)。
我想使用每个元组中的第二个值打破平局,例如,两个元组 (2, 2) 将具有相同的排名,但 (2, 3) 和 (2, 5) 将有不同的等级。结果列表应如下所示:
array([ 1., 5., 6., 3., 2., 7., 3.])
【问题讨论】:
-
“通过第二个值解决关系” - 什么?
-
对不起,我应该更好地解释自己。我的意思是我想像往常一样对列表进行排名(使用元组中的第一个值, scipy.stats.rankdata 将完全做到这一点),但是当有平局时,而不是为所有平局项目分配相同的排名,我想要使用元组中的第二个值打破平局。不确定这是否能更好地解释它?