Предположим, что у меня есть кадр данных с столбцами a b и c, я хочу сортировать данные-кадр по столбцу b по возрастанию и по столбцу c по убыванию, как это сделать?
Как отсортировать dataFrame в python pandas двумя или более столбцами?
Ответ 1
Начиная с версии 0.17.0 метод sort
устарел в пользу sort_values
. sort
был полностью удален в выпуске 0,20,0. Аргументы (и результаты) остаются теми же:
df.sort_values(['a', 'b'], ascending=[True, False])
Вы можете использовать восходящий аргумент sort
:
df.sort(['a', 'b'], ascending=[True, False])
Например:
In [11]: df1 = pd.DataFrame(np.random.randint(1, 5, (10,2)), columns=['a','b'])
In [12]: df1.sort(['a', 'b'], ascending=[True, False])
Out[12]:
a b
2 1 4
7 1 3
1 1 2
3 1 2
4 3 2
6 4 4
0 4 3
9 4 3
5 4 1
8 4 1
Как прокомментировал @renadeen
Сортировка по умолчанию не установлена! Таким образом, вы должны назначить результат метода сортировки переменной или добавить inplace = True в вызов метода.
то есть, если вы хотите повторно использовать df1 как отсортированный DataFrame:
df1 = df1.sort(['a', 'b'], ascending=[True, False])
или
df1.sort(['a', 'b'], ascending=[True, False], inplace=True)
Ответ 2
Как и в случае с pandas 0.17.0, DataFrame.sort()
устарел и установлен для удаления в будущей версии pandas. Теперь способ сортировки данных по его значениям составляет DataFrame.sort_values
Таким образом, ответ на ваш вопрос теперь будет
df.sort_values(['b', 'c'], ascending=[True, False], inplace=True)