Как сортировать pandas dataframe из одного столбца
У меня есть фрейм данных, как это:
print(df)
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). Оттуда, как я могу отсортировать этот фрейм данных в соответствии с порядком календарных месяцев?
Ответы
Ответ 1
Используйте sort_values
для сортировки df по определенным значениям столбца:
In [18]:
df.sort_values('2')
Out[18]:
0 1 2
4 85.6 January 1.0
3 95.5 February 2.0
7 104.8 March 3.0
0 354.7 April 4.0
8 283.5 May 5.0
6 238.7 June 6.0
5 152.0 July 7.0
1 55.4 August 8.0
11 212.7 September 9.0
10 249.6 October 10.0
9 278.8 November 11.0
2 176.5 December 12.0
Если вы хотите отсортировать по двум столбцам, передайте список меток столбцов в sort_values
с метками столбцов, упорядоченными в соответствии с приоритетом сортировки. Если вы используете df.sort_values(['2', '0'])
, результат будет отсортирован по столбцу 2
затем по столбцу 0
. Конечно, это не имеет смысла для этого примера, потому что каждое значение в df['2']
уникально.
Ответ 2
Я попробовал решения, описанные выше, и не добился результатов, поэтому я нашел другое решение, которое работает для меня. Ascending = False - порядок данных в порядке убывания, по умолчанию это True. Я использую python 3.6.6 и pandas 0.23.4 версии.
final_df = df.sort_values(by=['2'], ascending=False)
Вы можете видеть больше деталей в документации панд здесь.
Ответ 3
Просто добавив еще несколько операций с данными. Предположим, у нас есть датафрейм df
, мы можем сделать несколько операций, чтобы получить желаемые результаты
ID cost tax label
1 216590 1600 test
2 523213 1800 test
3 250 1500 experiment
df['label'].value_counts().to_frame().reset_index()).sort_values('label', ascending=False)
выдаст sorted
вывод меток в виде dataframe
index label
0 test 2
1 experiment 1
Ответ 4
Так же, как другое решение:
Вы можете классифицировать ваши строковые данные (название месяца) и сортировать их следующим образом:
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
.
Ответ 5
у меня есть вопрос относительно.. Могу ли я использовать df.sort_values (["column1", "column2"], ascending = False, True)? То есть, если я хочу, чтобы df сортировался по обоим столбцам, первый - в порядке убывания, а второй - в порядке возрастания?