Pandas Sort Values: Vollständige Anleitung zum Sortieren von DataFrames in Python
Updated on
Unsortierte Daten sind schwer zu analysieren. Sie durchsuchen Tausende von Zeilen, um die höchsten Umsätze, die neuesten Daten oder die niedrigsten Fehlerquoten zu finden -- und übersehen Muster, die offensichtlich wären, wenn die Daten sortiert wären. Das Sortieren einer Python-Liste funktioniert für einfache Fälle, aber DataFrames haben mehrere Spalten, gemischte Typen und fehlende Werte, die Listen nicht verarbeiten können.
Pandas sort_values() sortiert jeden DataFrame nach einer oder mehreren Spalten, mit voller Kontrolle über aufsteigende/absteigende Reihenfolge, Null-Platzierung und Stabilität. Dieser Leitfaden behandelt jedes Sortiermuster, das Ihnen in der realen Datenarbeit begegnet.
Grundlegendes Sortieren mit sort_values()
Nach einer Spalte sortieren
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'Diana', 'Eve'],
'score': [85, 92, 78, 95, 88],
'age': [25, 30, 22, 28, 35]
})
# Nach Score sortieren (standardmäßig aufsteigend)
sorted_df = df.sort_values('score')
print(sorted_df)
# name score age
# 2 Charlie 78 22
# 0 Alice 85 25
# 4 Eve 88 35
# 1 Bob 92 30
# 3 Diana 95 28Absteigend sortieren
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'Diana', 'Eve'],
'score': [85, 92, 78, 95, 88],
'age': [25, 30, 22, 28, 35]
})
# Höchste Punktzahlen zuerst
sorted_df = df.sort_values('score', ascending=False)
print(sorted_df)
# name score age
# 3 Diana 95 28
# 1 Bob 92 30
# 4 Eve 88 35
# 0 Alice 85 25
# 2 Charlie 78 22In-Place sortieren
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie'],
'score': [85, 92, 78]
})
# df direkt ändern (keine Kopie erstellt)
df.sort_values('score', inplace=True)
print(df)
# name score
# 2 Charlie 78
# 0 Alice 85
# 1 Bob 92Mehrspaltige Sortierung
Nach mehreren Spalten sortieren
import pandas as pd
df = pd.DataFrame({
'department': ['Sales', 'Engineering', 'Sales', 'Engineering', 'Sales'],
'name': ['Alice', 'Bob', 'Charlie', 'Diana', 'Eve'],
'salary': [70000, 85000, 65000, 90000, 70000]
})
# Zuerst nach Abteilung, dann nach Gehalt innerhalb jeder Abteilung
sorted_df = df.sort_values(['department', 'salary'])
print(sorted_df)
# department name salary
# 1 Engineering Bob 85000
# 3 Engineering Diana 90000
# 2 Sales Charlie 65000
# 0 Sales Alice 70000
# 4 Sales Eve 70000Gemischt aufsteigend/absteigend
import pandas as pd
df = pd.DataFrame({
'department': ['Sales', 'Engineering', 'Sales', 'Engineering', 'Sales'],
'name': ['Alice', 'Bob', 'Charlie', 'Diana', 'Eve'],
'salary': [70000, 85000, 65000, 90000, 70000]
})
# Abteilung aufsteigend, Gehalt absteigend
sorted_df = df.sort_values(
['department', 'salary'],
ascending=[True, False]
)
print(sorted_df)
# department name salary
# 3 Engineering Diana 90000
# 1 Engineering Bob 85000
# 0 Sales Alice 70000
# 4 Sales Eve 70000
# 2 Sales Charlie 65000Umgang mit fehlenden Werten (NaN)
Standardmäßig werden NaN-Werte unabhängig von der Sortierreihenfolge ans Ende gesetzt. Verwenden Sie na_position zur Steuerung:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'Diana'],
'score': [85, np.nan, 78, np.nan]
})
# NaN am Ende (Standard)
print(df.sort_values('score'))
# name score
# 2 Charlie 78.0
# 0 Alice 85.0
# 1 Bob NaN
# 3 Diana NaN
# NaN am Anfang
print(df.sort_values('score', na_position='first'))
# name score
# 1 Bob NaN
# 3 Diana NaN
# 2 Charlie 78.0
# 0 Alice 85.0Nach Index sortieren mit sort_index()
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie'],
'score': [85, 92, 78]
}, index=[2, 0, 1])
# Nach Index sortieren
print(df.sort_index())
# name score
# 0 Bob 92
# 1 Charlie 78
# 2 Alice 85
# Nach Spaltennamen sortieren (axis=1)
df2 = pd.DataFrame({
'c': [1, 2], 'a': [3, 4], 'b': [5, 6]
})
print(df2.sort_index(axis=1))
# a b c
# 0 3 5 1
# 1 4 6 2Index nach dem Sortieren zurücksetzen
Nach dem Sortieren bleibt der ursprüngliche Index erhalten. Für einen sauberen fortlaufenden Index:
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie'],
'score': [85, 92, 78]
})
sorted_df = df.sort_values('score').reset_index(drop=True)
print(sorted_df)
# name score
# 0 Charlie 78
# 1 Alice 85
# 2 Bob 92Verwenden Sie drop=True, um den alten Index zu verwerfen. Ohne diesen Parameter wird der alte Index zu einer Spalte.
Benutzerdefinierte Sortierreihenfolge
Verwendung von Kategorietypen
import pandas as pd
df = pd.DataFrame({
'priority': ['Medium', 'High', 'Low', 'High', 'Medium'],
'task': ['Task A', 'Task B', 'Task C', 'Task D', 'Task E']
})
# Benutzerdefinierte Reihenfolge definieren
priority_order = pd.CategoricalDtype(['Low', 'Medium', 'High'], ordered=True)
df['priority'] = df['priority'].astype(priority_order)
sorted_df = df.sort_values('priority')
print(sorted_df)
# priority task
# 2 Low Task C
# 0 Medium Task A
# 4 Medium Task E
# 1 High Task B
# 3 High Task DVerwendung des key-Parameters
import pandas as pd
df = pd.DataFrame({
'name': ['alice', 'Bob', 'CHARLIE', 'diana'],
'score': [85, 92, 78, 95]
})
# Groß-/Kleinschreibung ignorieren
sorted_df = df.sort_values('name', key=lambda x: x.str.lower())
print(sorted_df)
# name score
# 0 alice 85
# 1 Bob 92
# 2 CHARLIE 78
# 3 diana 95Methodenvergleich
| Methode | Zweck | Ändert Original? | Rückgabe |
|---|---|---|---|
sort_values(col) | Nach Spaltenwerten sortieren | Nein (außer inplace=True) | Sortierter DataFrame |
sort_values([col1, col2]) | Nach mehreren Spalten sortieren | Nein (außer inplace=True) | Sortierter DataFrame |
sort_index() | Nach Zeilenindex sortieren | Nein (außer inplace=True) | Sortierter DataFrame |
nsmallest(n, col) | n kleinste Werte abrufen | Nein | DataFrame-Teilmenge |
nlargest(n, col) | n größte Werte abrufen | Nein | DataFrame-Teilmenge |
rank() | Werten Ränge zuweisen | Nein | Series mit Rängen |
Leistungstipps
nlargest() und nsmallest() für Top-N
Wenn Sie nur die oberen oder unteren N Zeilen benötigen, sind nlargest() und nsmallest() schneller als das Sortieren des gesamten DataFrames:
import pandas as pd
import numpy as np
# Großer DataFrame
df = pd.DataFrame({
'id': range(1_000_000),
'value': np.random.randn(1_000_000)
})
# Schneller: nur Top 10 finden
top_10 = df.nlargest(10, 'value')
# Langsamer: alles sortieren, dann ausschneiden
top_10_slow = df.sort_values('value', ascending=False).head(10)Stabile vs. instabile Sortierung
import pandas as pd
df = pd.DataFrame({
'group': ['A', 'B', 'A', 'B'],
'value': [1, 1, 2, 2],
'order': [1, 2, 3, 4]
})
# Stabile Sortierung (Standard) behält die ursprüngliche Reihenfolge bei Gleichheit bei
stable = df.sort_values('value', kind='mergesort') # Standard
# Instabile Sortierung (schneller bei großen Datensätzen)
unstable = df.sort_values('value', kind='quicksort')Praktische Beispiele
Datumsangaben sortieren
import pandas as pd
df = pd.DataFrame({
'event': ['Launch', 'Meeting', 'Deadline', 'Review'],
'date': pd.to_datetime(['2026-03-15', '2026-01-10', '2026-02-28', '2026-01-05'])
})
# Chronologische Reihenfolge
print(df.sort_values('date'))
# event date
# 3 Review 2026-01-05
# 1 Meeting 2026-01-10
# 2 Deadline 2026-02-28
# 0 Launch 2026-03-15Sortieren mit GroupBy
import pandas as pd
df = pd.DataFrame({
'store': ['A', 'A', 'B', 'B', 'A', 'B'],
'product': ['X', 'Y', 'X', 'Y', 'Z', 'Z'],
'revenue': [100, 250, 150, 300, 200, 175]
})
# Umsatzstärkstes Produkt pro Geschäft
top_per_store = (df.sort_values('revenue', ascending=False)
.groupby('store')
.head(1))
print(top_per_store)
# store product revenue
# 3 B Y 300
# 1 A Y 250Sortierte Daten visuell erkunden
Nachdem Sie Ihren DataFrame sortiert haben, um Muster zu finden, können Sie mit PyGWalker (opens in a new tab) die gleichen Daten über interaktive Drag-and-Drop-Diagramme in Jupyter erkunden -- ohne zusätzlichen Code:
import pygwalker as pyg
walker = pyg.walk(sorted_df)Häufig gestellte Fragen
Wie sortiere ich einen DataFrame nach einer Spalte in pandas?
Verwenden Sie df.sort_values('column_name') für aufsteigende oder df.sort_values('column_name', ascending=False) für absteigende Sortierung. Für mehrere Spalten übergeben Sie eine Liste: df.sort_values(['col1', 'col2']).
Wie sortiere ich nach mehreren Spalten mit verschiedenen Reihenfolgen?
Übergeben Sie eine Liste von Booleans an ascending: df.sort_values(['col1', 'col2'], ascending=[True, False]). Dies sortiert col1 aufsteigend und col2 absteigend.
Wohin kommen NaN-Werte beim Sortieren?
Standardmäßig werden NaN-Werte unabhängig von der Sortierrichtung ans Ende gesetzt. Verwenden Sie na_position='first', um sie an den Anfang zu setzen: df.sort_values('col', na_position='first').
Was ist der Unterschied zwischen sort_values und sort_index?
sort_values() sortiert nach Spaltenwerten. sort_index() sortiert nach dem Zeilenindex (oder Spaltenindex mit axis=1). Verwenden Sie sort_values zum Datensortieren und sort_index, wenn Zeilen nach ihren Indexbezeichnungen geordnet sein müssen.
Wie sortiere ich einen DataFrame in-place ohne eine Kopie zu erstellen?
Übergeben Sie inplace=True: df.sort_values('col', inplace=True). Dies ändert den ursprünglichen DataFrame und gibt None zurück. Der moderne pandas-Stil bevorzugt jedoch die Neuzuweisung: df = df.sort_values('col').
Fazit
sort_values() ist das primäre Werkzeug zum Sortieren von DataFrames in pandas. Verwenden Sie einen einzelnen Spaltennamen für einfache Sortierungen, eine Liste für mehrspaltige Sortierungen und den ascending-Parameter zur Steuerung der Richtung. Behandeln Sie fehlende Werte mit na_position, verwenden Sie nlargest()/nsmallest() für Top-N-Abfragen und CategoricalDtype für benutzerdefinierte Reihenfolgen. Denken Sie daran, dass das Sortieren standardmäßig einen neuen DataFrame zurückgibt -- verwenden Sie reset_index(drop=True), wenn Sie danach einen sauberen fortlaufenden Index benötigen.