Сортировать структурированный массив Numpy на нескольких столбцах в разном порядке

1

У меня есть структурированный массив 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]

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

Я получаю:

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

мне нужно:

 a_sorted: [(36., 2), (36., 3), (35., 1)]
Теги:
arrays
numpy
sorting

1 ответ

1
Лучший ответ

Вы можете использовать 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'] Сортировка выполняется сначала -a['price']. Отрицание заботится о "нисходящем" аспекте.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню