Python Pandas - Sortieren

In Pandas gibt es zwei Arten der Sortierung. Sie sind -

  • Nach Etikett
  • Nach tatsächlichem Wert

Betrachten wir ein Beispiel mit einer Ausgabe.

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

Es ist output ist wie folgt -

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

Im unsorted_df, das labels und die valuessind unsortiert. Lassen Sie uns sehen, wie diese sortiert werden können.

Nach Etikett

Verwendung der sort_index()Durch Übergeben der Achsenargumente und der Sortierreihenfolge kann DataFrame sortiert werden. Standardmäßig erfolgt die Sortierung nach Zeilenbeschriftungen in aufsteigender Reihenfolge.

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

Es ist output ist wie folgt -

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

Sortierreihenfolge

Durch Übergeben des Booleschen Werts an den aufsteigenden Parameter kann die Reihenfolge der Sortierung gesteuert werden. Betrachten wir das folgende Beispiel, um dasselbe zu verstehen.

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

Es ist output ist wie folgt -

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

Sortieren Sie die Spalten

Durch Übergeben des Achsenarguments mit dem Wert 0 oder 1 kann die Sortierung nach den Spaltenbeschriftungen erfolgen. Standardmäßig ist Achse = 0, nach Zeile sortieren. Betrachten wir das folgende Beispiel, um dasselbe zu verstehen.

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

Es ist output ist wie folgt -

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

Nach Wert

Wie die Indexsortierung, sort_values()ist die Methode zum Sortieren nach Werten. Es akzeptiert ein 'by'-Argument, das den Spaltennamen des DataFrame verwendet, mit dem die Werte sortiert werden sollen.

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

Es ist output ist wie folgt -

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

Beachten Sie, dass die Werte für col1 sortiert sind und sich der jeweilige Wert für col2 und der Zeilenindex zusammen mit col1 ändern. Sie sehen also unsortiert aus.

'by' Argument nimmt eine Liste von Spaltenwerten.

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

Es ist output ist wie folgt -

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

Sortieralgorithmus

sort_values()bietet eine Möglichkeit, den Algorithmus aus Mergesort, Heapsort und Quicksort auszuwählen. Mergesort ist der einzige stabile Algorithmus.

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

Es ist output ist wie folgt -

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