Calcolare D usando i raggruppamenti in pandas
Eseguire un calcolo su sottoinsiemi di un DataFrame è così comune che pandas ci offre un'alternativa ai cicli: il metodo groupby. Nel codice di esempio, groupby viene usato per raggruppare i tract per stato, cioè le righe che hanno lo stesso valore nella colonna "state". Il metodo sum() viene applicato per gruppo alle colonne.
Questo esercizio usa anche merge, un altro metodo utile di pandas, per unire le somme raggruppate ai singoli tract. Non preoccuparti della sintassi per ora: merge verrà spiegato in una lezione successiva.
pandas è stato importato con il solito alias e il DataFrame tracts, con le colonne di popolazione white e black, è stato caricato. Le variabili w e b sono state definite con i nomi di colonna "white" e "black".
Questo esercizio fa parte del corso
Analizzare i dati del Censimento USA con Python
Istruzioni dell'esercizio
- Crea
sums_by_stateusandogroupbye stampa il risultato. - Crea
tractsusandomergee stampa il risultato. - Calcola \(\left\lvert\frac{a_i}{A} - \frac{b_i}{B}\right\rvert\) e salvalo in una nuova colonna
D. (Promemoria: La somma delle popolazioni White e Black (\(A\) e \(B\)) è già stata calcolata ed è disponibile nel DataFrametractsnelle colonne con suffisso"_sum"). - Somma la colonna
Dper stato usando il metodogroupbye moltiplica per0.5.
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
# 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())