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