English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Сортировка Pandas

У Pandas есть два способа сортировки:

По метке По фактическому значению

Давайте рассмотрим следующий пример.

 import pandas as pd
 import numpy as np
 unsorted_df=pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],colu
 mns=['col2','col1'])
 print(unsorted_df)

Результат выполнения:

    col2       col1
1  -2.063177   0.537527
4   0.142932  -0.684884
6   0.012667  -0.389340
2  -0.548797   1.848743
3  -1.044160   0.837381
5   0.385605   1.300185
9   1.031425  -1.002967
8  -0.407374  -0.435142
0   2.237453  -1.067139
7  -1.445831  -1.701035

В unsorted_df метки и значения не отсортированы. Давайте посмотрим, как их отсортировать.

Сортировка по меткам

Используя метод sort_index(), передавая параметр оси и порядок сортировки, можно отсортировать DataFrame. По умолчанию, строки сортируются по возрастанию.

 import pandas as pd
 import numpy as np
 unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],colu
    mns = ['col2', 'col1'])
 sorted_df = unsorted_df.sort_index()
 print(sorted_df)

Результат выполнения:

     col2   col1
9  0.825697  0.374463
8  -1.699509  0.510373
7  -0.581378  0.622958
6  -0.202951  0.954300
5  -1.289321  -1.551250
4  1.302561  0.851385
3  -0.157915  -0.388659
2  -1.222295  0.166609
1  0.584890  -0.291048
0  0.668444  -0.061294

Порядок сортировки

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

 import pandas as pd
 import numpy as np
 unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],colu
    mns = ['col2', 'col1'])
 sorted_df = unsorted_df.sort_index(ascending=False)
 print(sorted_df)

Результат выполнения:

     col2   col1
9  0.825697  0.374463
8  -1.699509  0.510373
7  -0.581378  0.622958
6  -0.202951  0.954300
5  -1.289321  -1.551250
4  1.302561  0.851385
3  -0.157915  -0.388659
2  -1.222295  0.166609
1  0.584890  -0.291048
0  0.668444  -0.061294

Сортировка по строкам

С помощью передачи параметра оси 0 или 1 можно сортировать по меткам столбца. По умолчанию, axis = 0 сортирует по строкам. Давайте рассмотрим следующий пример, чтобы понять ситуацию.

 import pandas as pd
 import numpy as np
  
 unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],colu
    mns = ['col2', 'col1'])
  
 sorted_df = unsorted_df.sort_index(axis=1)
 print(sorted_df)

Результат выполнения:

     col1   col2
1  -0.291048  0.584890
4  0.851385  1.302561
6  0.954300  -0.202951
2  0.166609  -1.222295
3  -0.388659  -0.157915
5  -1.551250  -1.289321
9  0.374463  0.825697
8  0.510373  -1.699509
0  -0.061294  0.668444
7  0.622958  -0.581378

Сортировка по значению

Аналогично индексной сортировке, sort_values() — это метод сортировки по значению. Он принимает параметр «by», который указывает на имя столбца DataFrame, по которому нужно сортировать значения.

import pandas as pd
 import numpy as np
 unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
    sorted_df = unsorted_df.sort_values(by='col1')
 print(sorted_df)

Результат выполнения:

   col1  col2
1    1    3
2    1    2
3    1    4
0    2    1

Обратите внимание, что значения col1 уже отсортированы, и соответствующие значения col2 и индекс строки будут изменены вместе с col1. Поэтому они кажутся не сгруппированными.

'by' Параметр принимает список значений столбца.

 import pandas as pd
 import numpy as np
 unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
    sorted_df = unsorted_df.sort_values(by=['col1','col2'])
 print(sorted_df)

Результат выполнения:

  col1 col2
2   1   2
1   1   3
3   1   4
0   2   1

Алгоритм сортировки

sort_values() Предоставляется возможность выбрать алгоритм из mergesort, heapsort и quicksort. Mergesort - это единственный стабильный алгоритм.

 import pandas as pd
 import numpy as np
 unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
 sorted_df = unsorted_df.sort_values(by='col1', kind='mergesort')
 print(sorted_df)

Результат выполнения:

  col1 col2
1    1    3
2    1    2
3    1    4
0    2    1