Python 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

это output выглядит следующим образом -

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, то labels и valuesнесортированы. Давайте посмотрим, как их можно отсортировать.

По этикетке

Используя 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

это output выглядит следующим образом -

col2       col1
0   0.208464   0.627037
1   0.641004   0.331352
2  -0.038067  -0.464730
3  -0.638456  -0.021466
4   0.014646  -0.737438
5  -0.290761  -1.669827
6  -0.797303  -0.018737
7   0.525753   1.628921
8  -0.567031   0.775951
9   0.060724  -0.322425

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

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

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

это output выглядит следующим образом -

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, можно выполнить сортировку по меткам столбцов. По умолчанию ось = 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

это output выглядит следующим образом -

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()это метод сортировки по значениям. Он принимает аргумент «по», который будет использовать имя столбца 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

это output выглядит следующим образом -

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

это output выглядит следующим образом -

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

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

sort_values()обеспечивает возможность выбора алгоритма из сортировки слиянием, сортировки в кучах и быстрой сортировки. 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

это output выглядит следующим образом -

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