我有一本包含列表的字典,每个列表具有相同数量的元素。
to_sort={'a':np.array([1,1,3]),'b':np.array([5,4,5])}
我想添加一个新键“ rank”,其中包含根据“ a”排序的字典的索引,如果是平局,则根据“ b”包含索引。我可以:
to_sort['a'].argsort()
并获得排序索引。但是,在示例中出现平局的情况下,我将得到:
np.array([1,3,3]).argsort()
Out[17]: array([0, 1, 2], dtype=int64)
现在,我想使用'b'的值对这些排序索引进行排名。例如期望的输出->[1,0,2]
而不是[0,1,2]
。首选Python本机解决方案
使用numpy.lexsort
此:
res = np.lexsort((to_sort['b'], to_sort['a']))
# array([1, 0, 2], dtype=int64)
请注意,此函数的排序顺序相反,即上面的代码首先按排序a
,然后按排序b
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句