як сортувати кадр даних панд з одного стовпця


237

У мене є такий кадр даних:

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). Звідки я можу сортувати цей кадр даних відповідно до замовлення календарних місяців?

Відповіді:


326

Використовуйте 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']унікальне.


75

Я спробував рішення вище, і не досягаю результатів, тому знайшов інше рішення, яке працює для мене. Висхідний = False , щоб замовити dataframe в низхідному порядок, за замовчуванням це правда . Я використовую версії python 3.6.6 і панди 0.23.4.

final_df = df.sort_values(by=['2'], ascending=False)

Більш детальну інформацію можна знайти в документації на панди тут .


9

Просто додайте ще кілька операцій над даними. Припустимо, у нас є кадр даних 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

7

Як і ще одне рішення:

ви можете класифікувати свої рядкові дані (назва місяця) і сортувати за цим так:

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)

Він надасть вам упорядковані дані, month nameяк ви вказали під час створення Categoricalоб’єкта.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.