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