Как отсортировать DataFrame pandas по одному столбцу
У меня есть DataFrame, который выглядит следующим образом:
0 1 2
0 354.7 April 4.0
1 55.4 August 8.0
2 176.5 December 12.0
3 95.5 February 2.0
4 85.6 January 1.0
5 152 July 7.0
6 238.7 June 6.0
7 104.8 March 3.0
8 283.5 May 5.0
9 278.8 November 11.0
10 249.6 October 10.0
11 212.7 September 9.0
Как видите, месяцы расположены не в календарном порядке. Я создал второй столбец для указания номера месяца, соответствующего каждому месяцу (1-12). Как я могу отсортировать этот DataFrame в соответствии с порядком календарных месяцев?
5 ответ(ов)
Использование имени столбца сработало для меня.
sorted_df = df.sort_values(by=['Column_name'], ascending=True)
Вот еще одно решение:
Вместо создания второго столбца, вы можете категоризировать ваши строковые данные (названия месяцев) и отсортировать их следующим образом:
df.rename(columns={1:'month'}, inplace=True)
df['month'] = pd.Categorical(df['month'], categories=['December', 'November', 'October', 'September', 'August', 'July', 'June', 'May', 'April', 'March', 'February', 'January'], ordered=True)
df = df.sort_values('month', ascending=False)
Это позволит вам получить отсортированные данные по названию месяца
в том порядке, который вы указали при создании объекта Categorical
.
Вы можете выполнить несколько операций над данными в DataFrame df
, чтобы получить нужные вам результаты. Например, если вы хотите получить отсортированное количество уникальных меток в вашем DataFrame, вы можете использовать следующий код:
(df['label'].value_counts().to_frame().reset_index()).sort_values('label', ascending=False)
Этот код сначала подсчитывает количество вхождений каждой уникальной метки в столбце label
, затем преобразует это в DataFrame и сбрасывает индексы. После этого производится сортировка по количеству меток в порядке убывания.
Результат будет выглядеть следующим образом в виде DataFrame:
index label
0 test 2
1 experiment 1
Таким образом, вы получите отсортированный вывод меток с их количеством.
Это сработало для меня:
df.sort_values(by='Column_name', inplace=True, ascending=False)
Вам, скорее всего, нужно сбросить индекс после сортировки:
df = df.sort_values('2')
df = df.reset_index(drop=True)
Это позволит вам получить новый индекс, начиная с нуля, что может быть полезно, если вы хотите избежать путаницы с предыдущими значениями индекса после сортировки.
Как изменить порядок столбцов в DataFrame?
Создание DataFrame в Pandas путём последовательного добавления строк
Преобразование списка словарей в DataFrame pandas
Объединение двух столбцов текста в DataFrame pandas
Как проверить, пустой ли DataFrame в pandas?