Calcular D usando agrupaciones en pandas
Realizar un cálculo sobre subconjuntos de un DataFrame es tan común que pandas nos da una alternativa a hacerlo en un bucle: el método groupby. En el código de ejemplo, primero se usa groupby para agrupar secciones censales por estado, es decir, aquellas filas que tienen el mismo valor en la columna "state". El método sum() se aplica por grupo a las columnas.
Este ejercicio también utiliza merge, otro método útil de pandas, para unir las sumas agrupadas con las secciones individuales. No te preocupes por la sintaxis por ahora. merge se explicará en una lección posterior.
Se ha importado pandas con el alias habitual y se ha cargado el DataFrame tracts con las columnas de población white y black. Las variables w y b se han definido con los nombres de columna "white" y "black".
Este ejercicio forma parte del curso
Análisis de datos del Censo de EE. UU. con Python
Instrucciones del ejercicio
- Crea
sums_by_stateusandogroupbye imprime el resultado. - Crea
tractsusandomergee imprime el resultado. - Calcula \(\left\lvert\frac{a_i}{A} - \frac{b_i}{B}\right\rvert\) y guárdalo en una nueva columna
D. (Recuerda: La suma de las poblaciones White y Black (\(A\) y \(B\)) ya se calculó y está disponible en el DataFrametractsen las columnas con el sufijo"_sum"). - Suma la columna
Dpor estado usando el métodogroupbyy multiplica por0.5.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
# 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())