0Pricing
Pandas & NumPy Academy · Lektion

Über den Index verknüpfen

Verwenden Sie DataFrame.join() und setzen Sie left_index/right_index=True in merge(), um DataFrames anhand ihres Index zusammenzuführen.

Über den Index verknüpfen ist eine kostenlose Pandas & NumPy Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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.

Indexbasierte Joins

Bisher haben Sie DataFrames zusammengeführt, indem Sie Werte in regulären Spalten abgeglichen haben. Manchmal sind die Informationen, anhand derer Sie abgleichen möchten, jedoch im Index des DataFrames statt in einer Spalte gespeichert. Pandas unterstützt indexbasierte Joins über DataFrame.join() sowie über pd.merge() mit den Parametern left_index=True oder right_index=True.

Die Methode DataFrame.join()

DataFrame.join(other) ist eine Komfortmethode, die standardmäßig über den Index beider DataFrames verknüpft. Sie entspricht einem Aufruf von pd.merge() mit left_index=True, right_index=True. Der Standardtyp des Joins ist 'left', im Gegensatz zu pd.merge(), dessen Standard 'inner' ist. Beide DataFrames müssen aussagekräftige Indexbezeichnungen besitzen, damit der Join korrekte Ergebnisse liefert.

import pandas as pd

profiles = pd.DataFrame(
    {'age': [25, 30, 22]},
    index=['alice', 'bob', 'carol']
)

scores = pd.DataFrame(
    {'score': [88, 95, 70]},
    index=['alice', 'carol', 'dave']
)

# join: left join on index (default)
result = profiles.join(scores)
print(result)
#        age  score
# alice   25   88.0
# bob     30    NaN   <- bob has no score
# carol   22   95.0

Join-Typ in join() steuern

Übergeben Sie den Parameter how an join(), um zu steuern, welche Zeilen erhalten bleiben, genauso wie bei pd.merge(). Die Optionen sind 'left' (Standard), 'right', 'inner' und 'outer'. Beispielsweise behält how='inner' nur Indizes, die in beiden DataFrames vorkommen, und entfernt die Zeile von alice, wenn dafür kein passender Index in der rechten Tabelle vorhanden ist.

# Inner join on index: only rows present in BOTH indices
print(profiles.join(scores, how='inner'))
#        age  score
# alice   25     88
# carol   22     70

# Outer join: all indices from both
print(profiles.join(scores, how='outer'))
#        age  score
# alice  25.0   88.0
# bob    30.0    NaN
# carol  22.0   70.0
# dave    NaN   95.0

Mehrere DataFrames gleichzeitig verbinden

Ein großer Vorteil von join() gegenüber pd.merge() besteht darin, dass eine Liste von DataFrames akzeptiert wird, die mit einem einzigen Aufruf alle an den aufrufenden DataFrame angefügt werden. Alle DataFrames müssen anhand ihres Index ausgerichtet sein. Das ist besonders praktisch, wenn Sie viele Feature-Tabellen haben, die alle nach demselben Schlüssel indiziert sind, etwa einer Benutzer-ID oder einem Datum, und diese zu einem breiten DataFrame zusammenführen möchten.

emails = pd.DataFrame({'email': ['a@x.com', 'b@x.com', 'c@x.com']},
                      index=['alice', 'bob', 'carol'])
city  = pd.DataFrame({'city': ['NY', 'LA', 'SF']},
                     index=['alice', 'bob', 'carol'])

# Join multiple DataFrames at once
result = profiles.join([emails, city])
print(result)
#        age    email city
# alice   25  a@x.com   NY
# bob     30  b@x.com   LA
# carol   22  c@x.com   SF

Nach einer Spalte in einer Tabelle und einem Index in einer anderen verbinden

Mit pd.merge() können Sie spaltenbasierte und indexbasierte Vergleiche mit left_on/right_index oder left_index/right_on kombinieren. Das ist nützlich, wenn ein DataFrame den Schlüssel in einer Spalte speichert, während der andere ihn als Index verwendet. Mit join() allein ist das nicht möglich.

# orders has customer_id as a column; customers is indexed by customer_id
customers_indexed = pd.DataFrame(
    {'name': ['Alice', 'Bob', 'Carol']},
    index=[101, 102, 103]
)
orders = pd.DataFrame({
    'order_id': [1, 2, 3],
    'customer_id': [101, 102, 101]
})

result = pd.merge(orders, customers_indexed,
                  left_on='customer_id', right_index=True)
print(result)
#    order_id  customer_id   name
# 0         1          101  Alice
# 2         3          101  Alice
# 1         2          102    Bob

left_index und right_index in merge() verwenden

Wenn beide DataFrames den Schlüssel als Index haben, verwenden Sie pd.merge(left, right, left_index=True, right_index=True). Das entspricht join(), verwendet jedoch standardmäßig den Join-Typ 'inner' und bietet explizitere Parameter. Außerdem erhalten Sie Zugriff auf alle anderen Parameter von pd.merge(), etwa suffixes und indicator.

# Both DataFrames indexed by user_id
demog = pd.DataFrame({'age': [25, 30]}, index=[1, 2])
behav = pd.DataFrame({'clicks': [10, 5]}, index=[1, 2])

# Equivalent joins
result1 = demog.join(behav)  # left join
result2 = pd.merge(demog, behav, left_index=True, right_index=True)  # inner join

print(result1)
print(result2)

Warum indexbasierte Joins verwenden?

Indexbasierte Joins werden bevorzugt, wenn Ihre DataFrames von Natur aus durch einen aussagekräftigen Bezeichner wie eine Benutzer-ID, eine Produkt-SKU oder ein Datum gekennzeichnet sind. Wenn Sie den Index für Joins verwenden, vermeiden Sie überflüssige Schlüsselspalten in Ihrem DataFrame. Außerdem kann dies schneller sein, da Pandas sortierte Indexstrukturen für Look-ups in O(log n) verwaltet. Besonders häufig kommen indexbasierte Joins in Zeitreihendaten zum Einsatz, bei denen der DatetimeIndex den natürlichen Join-Schlüssel bildet.

# Time series example: join temperature and humidity by date index
import numpy as np
dates = pd.date_range('2024-01-01', periods=5)
temp = pd.DataFrame({'temp_c': [10, 12, 9, 11, 13]}, index=dates)
humid = pd.DataFrame({'humidity': [65, 70, 60, 75, 68]}, index=dates)

weather = temp.join(humid)
print(weather.head())

Überlappende Spaltennamen behandeln

Wenn beide DataFrames Spalten mit demselben Namen haben (außer dem Schlüssel), löst join() standardmäßig einen ValueError aus, sofern Sie nicht die Parameter lsuffix und rsuffix angeben. Diese Parameter funktionieren wie suffixes in pd.merge() und hängen an die überlappenden Spaltennamen des linken beziehungsweise rechten DataFrames eine Zeichenkette an.

df_a = pd.DataFrame({'value': [1, 2]}, index=['x', 'y'])
df_b = pd.DataFrame({'value': [10, 20]}, index=['x', 'y'])

# Without suffixes: raises ValueError
# result = df_a.join(df_b)

# With suffixes: disambiguate column names
result = df_a.join(df_b, lsuffix='_left', rsuffix='_right')
print(result)
#    value_left  value_right
# x           1           10
# y           2           20

set_index vor dem Verbinden

Ein häufiger Arbeitsablauf besteht darin, vor dem Verbinden eine Spalte als Index festzulegen, damit Sie die Syntax von join() verwenden können. Nach dem Join bringt reset_index() den Schlüssel als reguläre Spalte zurück. Dieses Muster ist leicht verständlich: Den Schlüssel zum Index machen, die DataFrames verbinden und den Schlüssel wieder zurückstufen. Dadurch wird die Absicht für Personen, die Ihren Code später lesen, klar erkennbar.

orders_col = pd.DataFrame({'order_id': [1,2,3], 'customer_id': [10,20,10], 'amount': [100,200,150]})
cust_col = pd.DataFrame({'customer_id': [10,20], 'name': ['Alice','Bob']})

result = (
    orders_col.set_index('customer_id')
    .join(cust_col.set_index('customer_id'), how='left')
    .reset_index()
)
print(result)

Eine Series am DataFrame-Index ausrichten

Auch eine Series besitzt einen Index. Sie können sie per Zuweisung als neue Spalte zu einem DataFrame hinzufügen — Pandas richtet die Werte der Series automatisch an den übereinstimmenden Indexbezeichnungen aus. Das ist eine schlanke Form eines indexbasierten Joins, die sich eignet, wenn Sie eine einzelne Spalte aus einer Series hinzufügen möchten, ohne merge() oder join() aufzurufen.

df = pd.DataFrame({'sales': [100, 200, 150]}, index=['A', 'B', 'C'])
tax_rate = pd.Series({'A': 0.1, 'B': 0.2, 'C': 0.15})

# Index alignment: Series aligns to DataFrame index automatically
df['tax'] = df['sales'] * tax_rate
print(df)
#    sales   tax
# A    100  10.0
# B    200  40.0
# C    150  22.5

Performance von Index-Joins

Ein Join auf einem sortierten Index ist schneller als ein Join auf einer regulären Spalte, da Pandas eine binäre Suche im sortierten Index verwendet. Wenn Sie wiederholt Joins mit demselben Schlüssel durchführen, legen Sie diesen Schlüssel gleich zu Beginn Ihrer Pipeline einmal als Index fest. Das ist besonders in Zeitreihen-Workflows wichtig, in denen Sie über viele Dateien hinweg tausende Male einen Join mit einem DatetimeIndex ausführen.

# Sort index before repeated joins for speed
left = left.sort_index()
right = right.sort_index()

# Both sorted -> Pandas uses merge path with binary search
result = left.join(right, how='inner')

# Check if index is sorted
print('Left sorted:', left.index.is_monotonic_increasing)
print('Right sorted:', right.index.is_monotonic_increasing)

Schnelltest

Testen Sie Ihr Verständnis der indexbasierten Joins aus dieser Lektion.

Zusammenfassung der Lektion

In dieser Lektion haben Sie gelernt: DataFrame.join() führt standardmäßig einen Left-Join auf dem Index durch; pd.merge() mit left_index=True/right_index=True bietet mehr Kontrolle; Sie können mehrere DataFrames gleichzeitig verbinden, indem Sie eine Liste an join() übergeben; und ein sortierter Index verbessert die Join-Performance. Als Nächstes sehen wir uns an, wie Sie DataFrames mit pivot_table umformen.

Häufig gestellte Fragen

Ist die Lektion „Über den Index verknüpfen“ kostenlos?

Ja — der vollständige Text von „Über den Index verknüpfen“ 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 „Über den Index verknüpfen“?

Verwenden Sie DataFrame.join() und setzen Sie left_index/right_index=True in merge(), um DataFrames anhand ihres Index zusammenzuführen. 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 4 von 4.

Wie lange dauert die Lektion „Über den Index verknüpfen“?

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. pd.concat zum Stapeln von DataFrames
  2. pd.merge: Inner- und Outer-Joins
  3. Left- und Right-Joins
  4. Über den Index verknüpfen
← Zurück zu Pandas & NumPy Academy