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 |
---|---|
|
Standard: jedem Eintrag in der gleichen Gruppe den durchschnittlichen Rang zuweisen |
|
verwendet den minimalen Rang für die gesamte Gruppe |
|
verwendet den maximalen Rang für die gesamte Gruppe |
|
weist die Ränge in der Reihenfolge zu, in der die Werte in den Daten erscheinen |
|
wie |