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