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
Oefeninstructies
- Maak
sums_by_statemetgroupbyen print het resultaat. - Maak
tractsmetmergeen 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 DataFrametractsin de kolommen met de suffix"_sum"). - Sommeer de kolom
Dper staat met de methodegroupbyen vermenigvuldig met0.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())