Python Pandas - Clasificación

Hay dos tipos de clasificación disponibles en Pandas. Ellos son -

  • Por etiqueta
  • Por valor real

Consideremos un ejemplo con salida.

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

Sus output es como sigue -

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

En unsorted_df, la labels y el valuesestán sin clasificar. Veamos cómo se pueden ordenar estos.

Por etiqueta

Utilizando el sort_index(), pasando los argumentos del eje y el orden de clasificación, DataFrame se puede ordenar. De forma predeterminada, la clasificación se realiza en las etiquetas de fila en orden ascendente.

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

Sus output es como sigue -

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

Orden de clasificación

Al pasar el valor booleano al parámetro ascendente, se puede controlar el orden de clasificación. Consideremos el siguiente ejemplo para entender lo mismo.

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

Sus output es como sigue -

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

Ordenar las columnas

Al pasar el argumento del eje con un valor 0 o 1, la clasificación se puede realizar en las etiquetas de las columnas. De forma predeterminada, eje = 0, ordenar por fila. Consideremos el siguiente ejemplo para entender lo mismo.

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

Sus output es como sigue -

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 la clasificación de índices, sort_values()es el método para ordenar por valores. Acepta un argumento 'por' que utilizará el nombre de columna del DataFrame con el que se ordenarán los valores.

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

Sus output es como sigue -

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

Observe, los valores de col1 se ordenan y el valor de col2 y el índice de fila respectivos se alterarán junto con col1. Por lo tanto, se ven desordenados.

'by' El argumento toma una lista de valores de columna.

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

Sus output es como sigue -

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

Algoritmo de clasificación

sort_values()proporciona una disposición para elegir el algoritmo entre mergesort, heapsort y quicksort. Mergesort es el único algoritmo estable.

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

Sus output es como sigue -

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