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