Сортировать столбцы, содержащие числа, в массивном текстовом массиве на основе нескольких столбцов - PullRequest
0 голосов
/ 08 февраля 2019

Как отсортировать следующую матрицу:

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]))

Трассировка (последний последний вызов):

Файл "", строка 1, в отсортированном виде (A, ключ = лямбда k: (k [0], k [2], - k [1]))

Ошибка типа: неверный тип операнда для унарного символа:: 'numpy.str _'

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Ошибка говорит, что вы не можете отрицать numpy.str_ объект звучит логично.Но для решения вашей проблемы я советую сначала отсортировать массив с обратным порядком и ключом k[1], а затем отсортировать этот результат с помощью двух других ключей.

t = sorted(A, key = lambda k: k[1], reverse=True)
t = sorted(t, key = lambda k: (k[0],k[2]))
0 голосов
/ 08 февраля 2019

Вы должны преобразовать нарезанные значения в 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')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...