LoslegenKostenlos loslegen

D mit Gruppierung in Pandas berechnen

Eine Berechnung über Teilmengen eines DataFrame ist so häufig, dass pandas uns mit der Methode groupby eine Alternative zur Schleife bietet. Im Beispielcode wird groupby zuerst verwendet, um Tracts nach Bundesstaat zu gruppieren, also die Zeilen mit demselben Wert in der Spalte "state". Die Methode sum() wird pro Gruppe auf die Spalten angewendet.

In dieser Übung verwenden wir außerdem merge, eine weitere hilfreiche pandas-Methode, um die gruppierten Summen mit den einzelnen Tracts zu verknüpfen. Mach dir über die Syntax jetzt noch keine Gedanken. merge wird in einer späteren Lektion erklärt.

pandas wurde mit dem üblichen Alias importiert, und das DataFrame tracts mit den Bevölkerungsspalten white und black wurde geladen. Die Variablen w und b wurden mit den Spaltennamen "white" und "black" definiert.

Diese Übung ist Teil des Kurses

Analyse von US-Volkszählungsdaten mit Python

Kurs anzeigen

Anleitung zur Übung

  • Erstelle sums_by_state mit groupby und gib das Ergebnis aus.
  • Erstelle tracts mit merge und gib das Ergebnis aus.
  • Berechne \(\left\lvert\frac{a_i}{A} - \frac{b_i}{B}\right\rvert\) und speichere es in einer neuen Spalte D. (Erinnerung: Die Summe der weißen und schwarzen Bevölkerung (\(A\) und \(B\)) wurde bereits berechnet und ist im DataFrame tracts in den Spalten mit dem Suffix "_sum" verfügbar.)
  • Summiere die Spalte D nach Bundesstaat mit der Methode groupby und multipliziere mit 0.5.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

# Sum Black and White residents grouped by state
sums_by_state = tracts.groupby("state")[[w, b]].sum()
print(sums_by_state.head())

# Merge the sum with the original tract populations
tracts = pd.merge(tracts, sums_by_state, left_on = "state", 
    right_index = True, suffixes = ("", "_sum"))
print(tracts.head())

# Calculate inner expression of Index of Dissimilarity formula
tracts["D"] = abs(tracts[____] / tracts[____ + "_sum"] - ____ / ____)

# Calculate the Index of Dissimilarity
print(0.5 * tracts.____(____)["D"].sum())
Code bearbeiten und ausführen