Sortieren und Ranking#

Das Sortieren eines Datensatzes nach einem Kriterium ist eine weitere wichtige eingebaute Funktion. Um lexikografisch nach Zeilen- oder Spaltenindex zu sortieren, verwendet die Methoden pandas.Series.sort_index oder pandas.DataFrame.sort_index, die ein neues, sortiertes Objekt zurückgibt. Mit ascending=False wird die Sortierreihenfolge umgekehrt:

[1]:
import numpy as np
import pandas as pd


s = pd.Series(np.random.randn(7))

s.sort_index(ascending=False)
[1]:
6    0.681477
5    0.259093
4   -0.877553
3    0.539592
2    1.246258
1   -0.586841
0    0.392347
dtype: float64

Um eine Serie nach ihren Werten zu sortieren, könnt ihr die sort_values-Methode verwenden:

[2]:
s.sort_values()
[2]:
4   -0.877553
1   -0.586841
5    0.259093
0    0.392347
3    0.539592
6    0.681477
2    1.246258
dtype: float64

Alle fehlenden Werte werden standardmäßig an das Ende der Reihe sortiert:

[3]:
s = pd.Series(np.random.randn(7))
s[s < 0] = np.nan

s.sort_values()
[3]:
0    0.179928
3    0.565061
2    0.954890
6    1.017703
4    3.932341
1         NaN
5         NaN
dtype: float64

Mit einem DataFrame können ihr auf beiden Achsen nach Index sortieren:

[4]:
df = pd.DataFrame(np.random.randn(7, 3))

df
[4]:
0 1 2
0 0.580062 -1.583831 -0.484063
1 0.413304 -1.005881 -0.580430
2 0.166762 -0.635044 -0.407102
3 0.206200 0.615862 -1.561290
4 0.863733 1.282648 0.087279
5 0.261991 -0.544270 -0.396647
6 1.194072 -0.703340 -1.313653
[5]:
df.sort_index(ascending=False)
[5]:
0 1 2
6 1.194072 -0.703340 -1.313653
5 0.261991 -0.544270 -0.396647
4 0.863733 1.282648 0.087279
3 0.206200 0.615862 -1.561290
2 0.166762 -0.635044 -0.407102
1 0.413304 -1.005881 -0.580430
0 0.580062 -1.583831 -0.484063
[6]:
df.sort_index(axis=1, ascending=False)
[6]:
2 1 0
0 -0.484063 -1.583831 0.580062
1 -0.580430 -1.005881 0.413304
2 -0.407102 -0.635044 0.166762
3 -1.561290 0.615862 0.206200
4 0.087279 1.282648 0.863733
5 -0.396647 -0.544270 0.261991
6 -1.313653 -0.703340 1.194072

Beim Sortieren eines DataFrame könnt ihr die Daten in einer oder mehreren Spalten als Sortierschlüssel verwenden. Dazu übergebt ihr eine oder mehrere Spaltennamen an die Option by von sort_values:

[7]:
df.sort_values(by=2)
[7]:
0 1 2
3 0.206200 0.615862 -1.561290
6 1.194072 -0.703340 -1.313653
1 0.413304 -1.005881 -0.580430
0 0.580062 -1.583831 -0.484063
2 0.166762 -0.635044 -0.407102
5 0.261991 -0.544270 -0.396647
4 0.863733 1.282648 0.087279

Um nach mehreren Spalten zu sortieren, könnt ihr eine Liste von Namen übergeben.

Ranking weist Ränge von eins bis zur Anzahl der gültigen Datenpunkte in einem Array zu:

[8]:
df.rank()
[8]:
0 1 2
0 5.0 1.0 4.0
1 4.0 2.0 3.0
2 1.0 4.0 5.0
3 2.0 6.0 1.0
4 6.0 7.0 7.0
5 3.0 5.0 6.0
6 7.0 3.0 2.0

Wenn beim Ranking Gleichstände auftauchen, weist rank jeder Gruppe den mittleren Rang zu.

[9]:
df.rank(method="max")
[9]:
0 1 2
0 5.0 1.0 4.0
1 4.0 2.0 3.0
2 1.0 4.0 5.0
3 2.0 6.0 1.0
4 6.0 7.0 7.0
5 3.0 5.0 6.0
6 7.0 3.0 2.0

Weitere Verfahren mit rank#

Methode

Beschreibung

average

Standard: jedem Eintrag in der gleichen Gruppe den durchschnittlichen Rang zuweisen

min

verwendet den minimalen Rang für die gesamte Gruppe

max

verwendet den maximalen Rang für die gesamte Gruppe

first

weist die Ränge in der Reihenfolge zu, in der die Werte in den Daten erscheinen

dense

wie method='min', aber die Ränge erhöhen sich zwischen den Gruppen immer um 1 und nicht nach der Anzahl der gleichen Elemente in einer Gruppe