Pandas Python - Tri

Il existe deux types de tri disponibles dans Pandas. Ils sont -

  • Par label
  • Par valeur réelle

Prenons un exemple avec une sortie.

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

Ses output est comme suit -

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

Dans unsorted_df, la labels et le valuesne sont pas triés. Voyons comment ils peuvent être triés.

Par étiquette

En utilisant le sort_index()méthode, en passant les arguments de l'axe et l'ordre de tri, DataFrame peut être trié. Par défaut, le tri est effectué sur les étiquettes de ligne dans l'ordre croissant.

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

Ses output est comme suit -

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

Ordre de tri

En passant la valeur booléenne au paramètre croissant, l'ordre du tri peut être contrôlé. Prenons l'exemple suivant pour comprendre la même chose.

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

Ses output est comme suit -

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

Trier les colonnes

En passant l'argument axe avec une valeur 0 ou 1, le tri peut être effectué sur les étiquettes de colonne. Par défaut, axis = 0, triez par ligne. Prenons l'exemple suivant pour comprendre la même chose.

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

Ses output est comme suit -

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

Par valeur

Comme le tri d'index, sort_values()est la méthode de tri par valeurs. Il accepte un argument «par» qui utilisera le nom de colonne du DataFrame avec lequel les valeurs doivent être triées.

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

Ses output est comme suit -

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

Observez, les valeurs col1 sont triées et la valeur col2 et l'index de ligne respectifs seront modifiés avec col1. Ainsi, ils ne semblent pas triés.

'by' L'argument prend une liste de valeurs de colonne.

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

Ses output est comme suit -

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

Algorithme de tri

sort_values()fournit une disposition permettant de choisir l'algorithme parmi le tri par fusion, le tri en tas et le tri rapide. Mergesort est le seul algorithme stable.

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

Ses output est comme suit -

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