0Pricing
Pandas & NumPy Academy · Lektion

Nach dem Index sortieren

Ordnen Sie Zeilen mit sort_index() nach ihrem Indexlabel neu an und verstehen Sie, wann ein sortierter Index die Leistung verbessert.

Nach dem Index sortieren ist eine kostenlose Pandas & NumPy Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Pandas & NumPy Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Pandas & NumPy Academy-Kurs umfasst insgesamt 4 Lektionen.

Den DataFrame-Index verstehen

Jeder Pandas-DataFrame besitzt einen Zeilenindex – eine Menge von Bezeichnungen, mit denen Zeilen identifiziert und abgerufen werden. Standardmäßig handelt es sich um einen RangeIndex (0, 1, 2, …), Sie können ihn jedoch mit set_index() auf eine beliebige Spalte (Datumsangaben, Namen, IDs) setzen. Wenn der Index aussagekräftig ist (z. B. ein DatetimeIndex oder eine Kunden-ID), ergibt das Sortieren nach ihm statt nach einem Spaltenwert eine logisch geordnete Ausgabe.

import pandas as pd

df = pd.DataFrame(
    {'value': [10, 20, 30]},
    index=['C', 'A', 'B']  # out-of-order alphabetic index
)
print(df)
#    value
# C     10
# A     20
# B     30

sort_index() – Aufsteigend

DataFrame.sort_index() ordnet Zeilen nach ihren Indexbezeichnungen statt nach Spaltenwerten an. Standardmäßig wird aufsteigend sortiert – bei Zeichenkettenindizes alphabetisch, bei ganzzahligen Indizes numerisch und bei einem DatetimeIndex chronologisch. Dies ist die Standardmethode, um einen Datensatz nach dem Mischen oder dem Anhängen von Datensätzen außerhalb der Reihenfolge wieder in eine natürliche Reihenfolge zu bringen.

import pandas as pd

df = pd.DataFrame(
    {'temp': [22.5, 19.0, 25.1, 18.3]},
    index=pd.to_datetime(['2024-03-01', '2024-01-15', '2024-06-10', '2024-01-01'])
)

sorted_df = df.sort_index()
print(sorted_df)
#             temp
# 2024-01-01  18.3
# 2024-01-15  19.0
# 2024-03-01  22.5
# 2024-06-10  25.1

sort_index() – Absteigend

Übergeben Sie ascending=False, um den Index vom größten (bzw. neuesten) zum kleinsten (bzw. frühesten) Wert zu sortieren. Bei einem DatetimeIndex stehen dadurch die neuesten Beobachtungen an erster Stelle. Das ist die typische Anordnung für Finanzdaten, Protokolldateien und Ereignisströme, bei denen das jüngste Ereignis am relevantesten ist.

import pandas as pd

df = pd.DataFrame(
    {'price': [100, 110, 105, 115]},
    index=pd.to_datetime(['2024-01', '2024-02', '2024-03', '2024-04'])
)

# Most recent first
print(df.sort_index(ascending=False))
#             price
# 2024-04-30    115
# 2024-03-31    105
# 2024-02-29    110
# 2024-01-31    100

Spaltenbezeichnungen mit axis=1 sortieren

Standardmäßig sortiert sort_index() den Zeilenindex (axis=0). Übergeben Sie axis=1, um stattdessen die Spaltenbezeichnungen alphabetisch zu sortieren. Das ist nützlich, um breite DataFrames mit vielen Spalten zu standardisieren, sodass die Spalten in einer vorhersehbaren alphabetischen Reihenfolge erscheinen und sich Spalten visuell leichter finden oder DataFrames vergleichen lassen.

import pandas as pd

df = pd.DataFrame({
    'zebra': [1], 'apple': [2], 'mango': [3], 'banana': [4]
})

print('Before:', df.columns.tolist())
# ['zebra', 'apple', 'mango', 'banana']

sorted_cols = df.sort_index(axis=1)
print('After:', sorted_cols.columns.tolist())
# ['apple', 'banana', 'mango', 'zebra']

Wann ist ein sortierter Index schneller?

Pandas kann bei der Suche nach Bezeichnungen eine binäre Suche verwenden, wenn der Index sortiert (monoton) ist. Ein sortierter Index macht Slices wie .loc['2024-01':'2024-06'] zu einer Operation mit O(log n) statt O(n). Die Methode is_monotonic_increasing (oder is_monotonic_decreasing) gibt einen booleschen Wert zurück, der angibt, ob der Index bereits sortiert ist. Bei einem großen Index lohnt sich das einmalige Sortieren, wenn anschließend wiederholt Slices gebildet werden.

import pandas as pd
import numpy as np

idx = pd.to_datetime(['2024-03-01', '2024-01-15', '2024-06-10'])
df = pd.DataFrame({'v': [1, 2, 3]}, index=idx)

print('Sorted?', df.index.is_monotonic_increasing)  # False

df = df.sort_index()
print('Sorted?', df.index.is_monotonic_increasing)  # True

# Now slicing is efficient
print(df.loc['2024-01':'2024-03'])

sort_index() mit MultiIndex

Wenn ein DataFrame einen MultiIndex (hierarchischen Zeilenindex) besitzt, sortiert sort_index() standardmäßig alle Ebenen der Hierarchie. Mit dem Parameter level können Sie die Sortierung auf bestimmte Ebenen beschränken. Ein sortierter MultiIndex ist Voraussetzung für effiziente hierarchische Slices mit .loc[(outer, inner), :].

import pandas as pd

arrays = [
    ['B', 'B', 'A', 'A'],
    ['two', 'one', 'two', 'one']
]
idx = pd.MultiIndex.from_arrays(arrays, names=['first', 'second'])
df = pd.DataFrame({'value': [10, 20, 30, 40]}, index=idx)

print(df.sort_index())
#               value
# first second
# A     one       40
#       two       30
# B     one       20
#       two       10

Nur eine Ebene eines MultiIndex sortieren

Bei einem MultiIndex möchten Sie möglicherweise nur die innere oder äußere Ebene sortieren und dabei die Reihenfolge der anderen Ebene beibehalten. Übergeben Sie level= an sort_index() – akzeptiert werden eine Ganzzahl (Position der Ebene), eine Zeichenkette (Name der Ebene) oder eine Liste. Das ist nützlich, wenn die Reihenfolge der äußeren Ebene bereits korrekt ist und Sie nur innerhalb jeder Gruppe sortieren müssen.

import pandas as pd

df = pd.DataFrame({
    'sales': [300, 100, 200, 400, 150, 250]
}, index=pd.MultiIndex.from_tuples([
    ('Eng', 'Dave'), ('Eng', 'Alice'), ('Eng', 'Bob'),
    ('HR', 'Zoe'), ('HR', 'Carol'), ('HR', 'Eve')
], names=['dept', 'name']))

# Sort only the 'name' level alphabetically within each dept
print(df.sort_index(level='name'))
#              sales
# dept name
# Eng  Alice    100
#      Bob      200
#      Dave     300
# HR   Carol    150
#      Eve      250
#      Zoe      400

Unterschied zwischen sort_index() und sort_values()

Es ist wichtig, die beiden Sortiermethoden zu unterscheiden. sort_values(by='col') ordnet Zeilen anhand der Datenwerte in einer Spalte neu an. sort_index() ordnet Zeilen anhand des Zeilenlabels (des Index) neu an, das einer Spalte entsprechen kann, aber nicht muss. Wenn der Index die primäre Kennung ist (z. B. ein DatetimeIndex oder ein aussagekräftiger Schlüssel vom Typ String), ist sort_index() die richtige Wahl.

import pandas as pd

df = pd.DataFrame(
    {'value': [30, 10, 20]},
    index=['C', 'A', 'B']
)

# sort_index: sorted by row label A, B, C
print(df.sort_index())
#    value
# A     10
# B     20
# C     30

# sort_values: sorted by data value 10, 20, 30
print(df.sort_values('value'))
#    value
# A     10
# B     20
# C     30
# (same here because values happen to match alphabetical label order!)

Ursprüngliche Reihenfolge nach Operationen wiederherstellen

Einige Operationen (Mischen, zufälliges Sampling mit df.sample(frac=1)) bringen die Zeilenreihenfolge durcheinander. sort_index() ist die saubere Methode, um die ursprüngliche sequenzielle Reihenfolge wiederherzustellen. War der ursprüngliche Index ein RangeIndex (0, 1, 2, …), stellt sort_index() diese Reihenfolge wieder her; war er ein aussagekräftiges Label, wird die natürliche Sortierung dieser Labels wiederhergestellt.

import pandas as pd

df = pd.DataFrame({'x': [10, 20, 30, 40, 50]})

# Shuffle (random sample)
shuffled = df.sample(frac=1, random_state=42)
print('Shuffled index:', shuffled.index.tolist())
# e.g. [2, 4, 0, 1, 3]

# Restore original order by sorting the index
restored = shuffled.sort_index()
print('Restored index:', restored.index.tolist())
# [0, 1, 2, 3, 4]

sort_index() mit na_position

Wie sort_values() unterstützt auch sort_index() den Parameter na_position, mit dem Sie festlegen, wo NaN-Indexlabels erscheinen. Das ist relevant, wenn ein DataFrame einen String- oder Datumsindex mit einigen NaN-Labels besitzt (möglich nach Operationen, die fehlende Indexwerte einführen). Standardmäßig ist 'last' festgelegt.

import pandas as pd
import numpy as np

df = pd.DataFrame(
    {'v': [1, 2, 3, 4]},
    index=['B', None, 'A', 'C']
)

print(df.sort_index(na_position='last'))
#      v
# A    3
# B    1
# C    4
# NaN  2

Leistungsgewinn messen

Sie können den Leistungsvorteil eines sortierten Index empirisch messen, indem Sie mit Python und timeit einen Slice auf einem unsortierten und einem sortierten DatetimeIndex vergleichen. Der sortierte Fall verwendet eine binäre Suche und ist bei großen DataFrames typischerweise 5- bis 20-mal schneller. Das zeigt, warum sort_index() nicht nur eine kosmetische Operation ist – sie hat konkrete Auswirkungen auf die Laufzeit.

import pandas as pd
import numpy as np

np.random.seed(0)
random_dates = pd.to_datetime(
    pd.Timestamp('2020-01-01').value + np.random.randint(0, 1_000_000_000_000_000, size=100_000),
    unit='ns'
)
df = pd.DataFrame({'val': np.random.randn(100_000)}, index=random_dates)

# Without sort: O(n) scan
import timeit
t1 = timeit.timeit(lambda: df.loc['2022-01':'2022-06'], number=100)

df_sorted = df.sort_index()
t2 = timeit.timeit(lambda: df_sorted.loc['2022-01':'2022-06'], number=100)

print(f'Unsorted: {t1:.3f}s, Sorted: {t2:.3f}s, Speedup: {t1/t2:.1f}x')

Kurztest

Testen Sie Ihr Verständnis der Sortierung nach Index in Pandas.

Zusammenfassung der Lektion

In dieser Lektion haben Sie gelernt: sort_index() ordnet Zeilen nach ihrem Label (nicht nach Spaltenwerten) neu an, axis=1 sortiert Spaltenlabels alphabetisch, und ein sortierter Index ermöglicht binäre Suche, wodurch zeitbasierte Slices deutlich schneller werden. Bei DataFrames mit MultiIndex beschränkt level= die Sortierung auf eine Hierarchieebene. Prüfen Sie immer is_monotonic_increasing, bevor Sie sich auf effiziente Slice-Zugriffe verlassen. Als Nächstes ordnen wir Werte innerhalb einer Spalte ein.

Häufig gestellte Fragen

Ist die Lektion „Nach dem Index sortieren“ kostenlos?

Ja — der vollständige Text von „Nach dem Index sortieren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Pandas & NumPy Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Pandas & NumPy Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Nach dem Index sortieren“?

Ordnen Sie Zeilen mit sort_index() nach ihrem Indexlabel neu an und verstehen Sie, wann ein sortierter Index die Leistung verbessert. Du übst Pandas & NumPy Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Pandas & NumPy Academy zu starten?

Keine Vorkenntnisse erforderlich. Pandas & NumPy Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Nach dem Index sortieren“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Pandas & NumPy Academy-Lektion Code schreiben und ausführen?

Ja. Jede Pandas & NumPy Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Nach Spaltenwerten sortieren
  2. Nach dem Index sortieren
  3. Werte rangordnen
  4. Index setzen und zurücksetzen
← Zurück zu Pandas & NumPy Academy