ÎncepețiÎncepe gratuit

Calcularea lui D folosind gruparea în Pandas

Efectuarea unui calcul pe subseturi ale unui DataFrame este atât de frecventă încât pandas oferă o alternativă la utilizarea unei bucle: metoda groupby. În codul exemplu, groupby este folosit mai întâi pentru a grupa sectoarele de recensământ după stat, adică acele rânduri care au aceeași valoare în coloana "state". Metoda sum() se aplică pe grup coloanelor.

Acest exercițiu folosește și merge, o altă metodă utilă din pandas, pentru a uni sumele grupate cu sectoarele individuale. Nu te îngrijora deocamdată de sintaxă. merge va fi explicat într-o lecție ulterioară.

pandas a fost importat cu aliasul obișnuit, iar DataFrame-ul tracts cu coloanele de populație white și black a fost încărcat. Variabilele w și b au fost definite cu numele de coloane "white" și respectiv "black".

Acest exercițiu face parte din cursul

Analiza datelor recensământului SUA în Python

Vezi cursul

Instrucțiuni pentru exercițiu

  • Creează sums_by_state folosind groupby și afișează rezultatul.
  • Creează tracts folosind merge și afișează rezultatul.
  • Calculează \(\left\lvert\frac{a_i}{A} - \frac{b_i}{B}\right\rvert\) și stochează rezultatul într-o coloană nouă D. (Reminder: Suma populațiilor White și Black (\(A\) și \(B\)) a fost deja calculată și este disponibilă în DataFrame-ul tracts, în coloanele cu sufixul "_sum").
  • Sumează coloana D pe stat folosind metoda groupby și înmulțește cu 0.5.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

# 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())
Editează și rulează codul