Python Pandas - Classificação
Existem dois tipos de classificação disponíveis no Pandas. Eles são -
- Por etiqueta
- Por valor real
Vamos considerar um exemplo com uma saída.
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
Está output é o seguinte -
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
Dentro unsorted_df, a labels e a valuesnão estão classificados. Vamos ver como eles podem ser classificados.
Por etiqueta
Usando o sort_index(), passando os argumentos do eixo e a ordem de classificação, DataFrame pode ser classificado. Por padrão, a classificação é feita nos rótulos das linhas em ordem crescente.
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
Está output é o seguinte -
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
Ordem de classificação
Ao passar o valor booleano para o parâmetro ascendente, a ordem da classificação pode ser controlada. Vamos considerar o seguinte exemplo para entender o mesmo.
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
Está output é o seguinte -
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
Classifique as colunas
Ao passar o argumento do eixo com valor 0 ou 1, a classificação pode ser feita nos rótulos das colunas. Por padrão, eixo = 0, classificar por linha. Vamos considerar o seguinte exemplo para entender o mesmo.
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
Está output é o seguinte -
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
Por valor
Como classificação de índice, sort_values()é o método de classificação por valores. Ele aceita um argumento 'por' que usará o nome da coluna do DataFrame com o qual os valores serão classificados.
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
Está output é o seguinte -
col1 col2
1 1 3
2 1 2
3 1 4
0 2 1
Observe, os valores col1 são classificados e o respectivo valor col2 e índice de linha serão alterados junto com col1. Portanto, eles parecem não classificados.
'by' argumento leva uma lista de valores de coluna.
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
Está output é o seguinte -
col1 col2
2 1 2
1 1 3
3 1 4
0 2 1
Algoritmo de classificação
sort_values()fornece uma opção para escolher o algoritmo de mergesort, heapsort e quicksort. Mergesort é o único algoritmo estável.
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
Está output é o seguinte -
col1 col2
1 1 3
2 1 2
3 1 4
0 2 1