6

Как отсортировать DataFrame pandas по одному столбцу

10

У меня есть 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 ответ(ов)

0

Использование имени столбца сработало для меня.

sorted_df = df.sort_values(by=['Column_name'], ascending=True)
0

Вот еще одно решение:

Вместо создания второго столбца, вы можете категоризировать ваши строковые данные (названия месяцев) и отсортировать их следующим образом:

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.

0

Вы можете выполнить несколько операций над данными в 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

Таким образом, вы получите отсортированный вывод меток с их количеством.

0

Это сработало для меня:

df.sort_values(by='Column_name', inplace=True, ascending=False)
0

Вам, скорее всего, нужно сбросить индекс после сортировки:

df = df.sort_values('2')
df = df.reset_index(drop=True)

Это позволит вам получить новый индекс, начиная с нуля, что может быть полезно, если вы хотите избежать путаницы с предыдущими значениями индекса после сортировки.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь