Сортировать структурированный массив Numpy на нескольких столбцах в разном порядке - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть структурированный массив NumPy:

dtype = [('price', float), ('counter', int)]
values = [(35, 1), (36, 2),
          (36, 3)]
a = np.array(values, dtype=dtype)

Я хочу отсортировать по цене, а затем по счетчику, если цена равна:

a_sorted = np.sort(a, order=['price', 'counter'])[::-1]

Мне нужна цена по убываниюпорядок и когда цены равны, считайте счетчик в порядке возрастания.В приведенном выше примере и цена, и счетчик расположены в порядке убывания.

То, что я получаю:

a_sorted: [(36., 3), (36., 2), (35., 1)]

, что мне нужно:

 a_sorted: [(36., 2), (36., 3), (35., 1)]

1 Ответ

0 голосов
/ 28 сентября 2018

Вы можете использовать np.lexsort:

a_sorted = a[np.lexsort((a['counter'], -a['price']))]

Результат:

array([(36.0, 2), (36.0, 3), (35.0, 1)], 
      dtype=[('price', '<f8'), ('counter', '<i4')])

Просто помните, что порядок обратный, то есть сортировка выполняется сначала с помощью -a['price'].Отрицание заботится о «нисходящем» аспекте.

...