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 1.327001
5 -1.601136
4 1.641455
3 -0.724621
2 0.071338
1 -2.000136
0 0.317815
dtype: float64
Um eine Serie nach ihren Werten zu sortieren, könnt ihr die sort_values
-Methode verwenden:
[2]:
s.sort_values()
[2]:
1 -2.000136
5 -1.601136
3 -0.724621
2 0.071338
0 0.317815
6 1.327001
4 1.641455
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]:
3 0.553928
1 0.733592
5 1.148924
0 NaN
2 NaN
4 NaN
6 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.799196 | -0.067099 | -0.411729 |
1 | -0.810730 | 1.266002 | -0.253321 |
2 | 0.363349 | 0.393135 | -0.842521 |
3 | 0.635861 | 0.066355 | -1.138751 |
4 | 2.500409 | 0.334972 | -3.329376 |
5 | 0.824858 | 0.809429 | -0.411104 |
6 | 0.491889 | 0.985929 | 1.102593 |
[5]:
df.sort_index(ascending=False)
[5]:
0 | 1 | 2 | |
---|---|---|---|
6 | 0.491889 | 0.985929 | 1.102593 |
5 | 0.824858 | 0.809429 | -0.411104 |
4 | 2.500409 | 0.334972 | -3.329376 |
3 | 0.635861 | 0.066355 | -1.138751 |
2 | 0.363349 | 0.393135 | -0.842521 |
1 | -0.810730 | 1.266002 | -0.253321 |
0 | 0.799196 | -0.067099 | -0.411729 |
[6]:
df.sort_index(axis=1, ascending=False)
[6]:
2 | 1 | 0 | |
---|---|---|---|
0 | -0.411729 | -0.067099 | 0.799196 |
1 | -0.253321 | 1.266002 | -0.810730 |
2 | -0.842521 | 0.393135 | 0.363349 |
3 | -1.138751 | 0.066355 | 0.635861 |
4 | -3.329376 | 0.334972 | 2.500409 |
5 | -0.411104 | 0.809429 | 0.824858 |
6 | 1.102593 | 0.985929 | 0.491889 |
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 | |
---|---|---|---|
4 | 2.500409 | 0.334972 | -3.329376 |
3 | 0.635861 | 0.066355 | -1.138751 |
2 | 0.363349 | 0.393135 | -0.842521 |
0 | 0.799196 | -0.067099 | -0.411729 |
5 | 0.824858 | 0.809429 | -0.411104 |
1 | -0.810730 | 1.266002 | -0.253321 |
6 | 0.491889 | 0.985929 | 1.102593 |
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 | 1.0 | 7.0 | 6.0 |
2 | 2.0 | 4.0 | 3.0 |
3 | 4.0 | 2.0 | 2.0 |
4 | 7.0 | 3.0 | 1.0 |
5 | 6.0 | 5.0 | 5.0 |
6 | 3.0 | 6.0 | 7.0 |
Wenn beim Ranking Gleichstände auftauchen, weist rank
jeder Gruppe den mittleren Rang zu.
[10]:
df.rank(method='max')
[10]:
0 | 1 | 2 | |
---|---|---|---|
0 | 5.0 | 1.0 | 4.0 |
1 | 1.0 | 7.0 | 6.0 |
2 | 2.0 | 4.0 | 3.0 |
3 | 4.0 | 2.0 | 2.0 |
4 | 7.0 | 3.0 | 1.0 |
5 | 6.0 | 5.0 | 5.0 |
6 | 3.0 | 6.0 | 7.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 |