基于多个列对包含numpy文本数组中的数字的列进行排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于多个列对包含numpy文本数组中的数字的列进行排序相关的知识,希望对你有一定的参考价值。

如何对以下矩阵进行排序:

import numpy as np

A = np.array([['2', '2', '2', 'd'],
              ['1', '1', '3', 'c'],
              ['1', '13', '1', 'a'],
              ['1', '11', '3', 'b']], dtype='<U2')

基于文本单元格中的数字并基于多列?列表排序的工作原理如下:

sorted([[2, 2, 2, 'd'],
        [1, 1, 3, 'c'],
        [1, 13, 1, 'a'],
        [1, 11, 3, 'b']], key = lambda k: (k[0],k[2],-k[1]))

Out[1]: [[1, 13, 1, 'a'], [1, 11, 3, 'b'], [1, 1, 3, 'c'], [2, 2, 2, 'd']]

但我怎么能排序numpy数组A类似于上面的列表?

初审没有成功......

sorted(A, key = lambda k: (k[0],k[2],-k[1]))

Traceback(最近一次调用最后一次):

文件“<ipython-input -...>”,第1行,已排序(A,键= lambda k:(k [0],k [2], - k [1]))

TypeError:一元的坏操作数类型 - :'numpy.str_'

答案

您必须将切片值转换为int

sorted(A, key = lambda k: (int(k[0]),int(k[2]),-int(k[1])))

[array(['1', '13', '1', 'a'], dtype='<U2'),
 array(['1', '11', '3', 'b'], dtype='<U2'),
 array(['1', '1', '3', 'c'], dtype='<U2'),
 array(['2', '2', '2', 'd'], dtype='<U2')]
另一答案

错误说你不能否定numpy.str_对象的声音逻辑。但是为了解决你的问题,我建议你先用反向排序和密钥k[1]对数组进行排序,然后用另外两个键对这个结果进行排序。

t = sorted(A, key = lambda k: k[1], reverse=True)
t = sorted(t, key = lambda k: (k[0],k[2]))

以上是关于基于多个列对包含numpy文本数组中的数字的列进行排序的主要内容,如果未能解决你的问题,请参考以下文章

Spark基于其他数据框中的列对数据框中的列进行重复数据删除

使用来自不同数据帧的列对多个组执行计算

如何根据基于其他列的列对数据框进行排序[重复]

基于列对二维向量数组进行排序

在遵循特定结构的同时按列对多索引进行排序

如何使用laravel中其他表中的列对数据进行排序