Skip to content

Pandas: Sortieren von DataFrame, Serien mit sort_values(), sort_index()

Python

Um pandas.DataFrame und pandas.Series zu sortieren, verwenden Sie sort_values() und sort_index(). Sie können in aufsteigender oder absteigender Reihenfolge oder nach mehreren Spalten sortieren.

Beachten Sie, dass die Methode sort() in der alten Version veraltet ist.

Dieser Artikel hat folgenden Inhalt.

  • Sortieren nach Element (Daten):sort_values()
    • Aufsteigend oder absteigend:ascending
    • Nach mehreren Spalten sortieren
    • Umgang mit NaN:na_position
    • Originalobjekt ändern:inplace
    • In Zeilenrichtung sortieren:axis
  • Sortieren nach Index/Spalten (Zeilen-/Spaltennamen):sort_index()
    • Nach Index sortieren (Zeilenname)
    • Aufsteigend oder absteigend:ascending
    • Originalobjekt ändern:inplace
    • Nach Spalten sortieren (Spaltenname):axis

Die folgenden Daten werden als Beispiel verwendet.

import pandas as pd

df = pd.read_csv('data/src/sample_pandas_normal.csv')
print(df)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

Das Beispiel verwendet pandas.DataFrame, aber pandas.Series bietet auch reset_index(). Die Verwendung ist die gleiche.

Sortieren nach Element (Daten):sort_values()

Verwenden Sie zum Sortieren nach Elementwert die Methode sort_values().

Geben SIE die Spaltenbezeichnung (Spaltenname) an, nach der SIE im ersten Argument sortieren möchten.

df_s = df.sort_values('state')
print(df_s)
#       name  age state  point
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 4    Ellen   24    CA     88
# 0    Alice   24    NY     64
# 5    Frank   30    NY     57
# 3     Dave   68    TX     70

Verwenden Sie reset_index(), um den Index neu zuzuweisen.

Aufsteigend oder absteigend:ascending

Standardmäßig wird in aufsteigender Reihenfolge sortiert. Wenn Sie eine absteigende Reihenfolge benötigen, setzen Sie das aufsteigende Argument auf False.

df_s = df.sort_values('state', ascending=False)
print(df_s)
#       name  age state  point
# 3     Dave   68    TX     70
# 0    Alice   24    NY     64
# 5    Frank   30    NY     57
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 4    Ellen   24    CA     88

Nach mehreren Spalten sortieren

Wenn SIE das erste Argument als Liste angeben, können Sie nach mehreren Spalten sortieren.

Sortieren Sie von hinten in der Liste der Reihe nach. Anschließend WIRD nach der ersten angegebenen Spalte in der Liste sortiert.

df_s = df.sort_values(['state', 'age'])
print(df_s)
#       name  age state  point
# 2  Charlie   18    CA     70
# 4    Ellen   24    CA     88
# 1      Bob   42    CA     92
# 0    Alice   24    NY     64
# 5    Frank   30    NY     57
# 3     Dave   68    TX     70

df_s = df.sort_values(['age', 'state'])
print(df_s)
#       name  age state  point
# 2  Charlie   18    CA     70
# 4    Ellen   24    CA     88
# 0    Alice   24    NY     64
# 5    Frank   30    NY     57
# 1      Bob   42    CA     92
# 3     Dave   68    TX     70

Wird das Argument aufsteigend in einer Liste angegeben, kann für jede Spalte aufsteigend/absteigend sortiert werden.

df_s = df.sort_values(['age', 'state'], ascending=[True, False])
print(df_s)
#       name  age state  point
# 2  Charlie   18    CA     70
# 0    Alice   24    NY     64
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57
# 1      Bob   42    CA     92
# 3     Dave   68    TX     70

Umgang mit NaN:na_position

Wenn ein Wert NaN fehlt, wird er standardmäßig am Ende aufgeführt.

df_nan = df.copy()
df_nan.iloc[:2, 1] = pd.np.nan
print(df_nan)
#       name   age state  point
# 0    Alice   NaN    NY     64
# 1      Bob   NaN    CA     92
# 2  Charlie  18.0    CA     70
# 3     Dave  68.0    TX     70
# 4    Ellen  24.0    CA     88
# 5    Frank  30.0    NY     57

df_nan_s = df_nan.sort_values('age')
print(df_nan_s)
#       name   age state  point
# 2  Charlie  18.0    CA     70
# 4    Ellen  24.0    CA     88
# 5    Frank  30.0    NY     57
# 3     Dave  68.0    TX     70
# 0    Alice   NaN    NY     64
# 1      Bob   NaN    CA     92

Wenn das Argument na_position=’first‘ ist, WIRD es oben aufgeführt.

df_nan_s = df_nan.sort_values('age', na_position='first')
print(df_nan_s)
#       name   age state  point
# 0    Alice   NaN    NY     64
# 1      Bob   NaN    CA     92
# 2  Charlie  18.0    CA     70
# 4    Ellen  24.0    CA     88
# 5    Frank  30.0    NY     57
# 3     Dave  68.0    TX     70

In den following Artikeln erfahren SIE, wie SIE fehlende Werte entfernen und ersetzen.

Originalobjekt ändern:inplace

Standardmäßig werden neue sortierte Objekte zurückgegeben, aber wenn das Inplace-Argument auf True gesetzt ist, wird das ursprüngliche Objekt selbst geändert.

df.sort_values('state', inplace=True)
print(df)
#       name  age state  point
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 4    Ellen   24    CA     88
# 0    Alice   24    NY     64
# 5    Frank   30    NY     57
# 3     Dave   68    TX     70

In Zeilenrichtung sortieren:axis

Wie in den vorherigen Beispielen wird standardmäßig in Spaltenrichtung (vertikale Richtung) sortiert.

Wenn Sie in Zeilenrichtung sortieren möchten, setzen Sie die Argumentachse auf 1. Andere Argumente können auf die gleiche Weise wie in den vorherigen Beispielen verwendet werden.

Da beim Mischen einer Zahl und einer Zeichenfolge ein Fehlerauftritt, werden in diesem Beispiel Zeichenfolgenspalten gelöscht, sodass nur numerische Spalten verwendet werden. Siehe den folgenden Artikel für die Methode drop().

df_d = df.drop(['name', 'state'], axis=1)
print(df_d)
#    age  point
# 1   42     92
# 2   18     70
# 4   24     88
# 0   24     64
# 5   30     57
# 3   68     70

df_d .sort_values(by=1, axis=1, ascending=False, inplace=True)
print(df_d)
#    point  age
# 1     92   42
# 2     70   18
# 4     88   24
# 0     64   24
# 5     57   30
# 3     70   68

Sortieren nach Index/Spalten (Zeilen-/Spaltennamen):sort_index()

Um nach Index/Spalten (Zeilen-/Spaltennamen) zu sortieren, verwenden Sie die Methode sort_index().

Nach Index sortieren (Zeilenname)

Standardmäßig sortiert sort_index() in Spaltenrichtung (vertikale Richtung) gemäß dem Zeilennamen (Label).

print(df)
#       name  age state  point
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 4    Ellen   24    CA     88
# 0    Alice   24    NY     64
# 5    Frank   30    NY     57
# 3     Dave   68    TX     70

df_s = df.sort_index()
print(df_s)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

Aufsteigend oder absteigend:ascending

Wie bei sort_values() wird standardmäßig in aufsteigender Reihenfolge sortiert. Wenn Sie eine absteigende Reihenfolge benötigen, setzen Sie das aufsteigende Argument auf False.

df_s = df.sort_index(ascending=False)
print(df_s)
#       name  age state  point
# 5    Frank   30    NY     57
# 4    Ellen   24    CA     88
# 3     Dave   68    TX     70
# 2  Charlie   18    CA     70
# 1      Bob   42    CA     92
# 0    Alice   24    NY     64

Originalobjekt ändern:inplace

Wie bei sort_values() can SIE das Argument an Ort und Stelle verwenden. Wenn Sie es auf True setzen, wird das ursprüngliche Objekt geändert.

df.sort_index(inplace=True)
print(df)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

Nach Spalten sortieren (Spaltenname):axis

Durch das Setzen von axis=1 WIRD in Zeilenrichtung (horizontale Richtung) nach den Spalten (Spaltenname) sortiert. Andere Argumente können wie in den vorherigen Beispielen verwendet werden.

df_s = df.sort_index(axis=1)
print(df_s)
#    age     name  point state
# 0   24    Alice     64    NY
# 1   42      Bob     92    CA
# 2   18  Charlie     70    CA
# 3   68     Dave     70    TX
# 4   24    Ellen     88    CA
# 5   30    Frank     57    NY

df.sort_index(axis=1, ascending=False, inplace=True)
print(df)
#   state  point     name  age
# 0    NY     64    Alice   24
# 1    CA     92      Bob   42
# 2    CA     70  Charlie   18
# 3    TX     70     Dave   68
# 4    CA     88    Ellen   24
# 5    NY     57    Frank   30