Aan de slagGa gratis aan de slag

D berekenen met grouping in pandas

Een berekening uitvoeren over deelverzamelingen van een DataFrame komt zo vaak voor dat pandas een alternatief biedt voor een lus: de methode groupby. In de voorbeeldcode wordt groupby eerst gebruikt om tracts per staat te groeperen, dus de rijen met dezelfde waarde in de kolom "state". De methode sum() wordt per groep op de kolommen toegepast.

In deze oefening gebruiken we ook merge, een andere handige pandas-methode, om de gegroepeerde sommen te koppelen aan de individuele tracts. Maak je nog geen zorgen over de syntaxis. merge wordt in een latere les uitgelegd.

pandas is geïmporteerd met de gebruikelijke alias en de DataFrame tracts met de populatiekolommen white en black is geladen. De variabelen w en b zijn gedefinieerd met de kolomnamen "white" en "black".

Deze oefening maakt deel uit van de cursus

US Census-gegevens analyseren in Python

Cursus bekijken

Oefeninstructies

  • Maak sums_by_state met groupby en print het resultaat.
  • Maak tracts met merge en print het resultaat.
  • Bereken \(\left\lvert\frac{a_i}{A} - \frac{b_i}{B}\right\rvert\) en sla dit op in een nieuwe kolom D. (Ter herinnering: De som van de White- en Black-populaties (\(A\) en \(B\)) was al berekend en is beschikbaar in de DataFrame tracts in de kolommen met de suffix "_sum").
  • Sommeer de kolom D per staat met de methode groupby en vermenigvuldig met 0.5.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

# 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 bewerken en uitvoeren