Zacznij terazZacznij za darmo

Obliczanie D za pomocą grupowania w Pandas

Wykonywanie obliczeń na podzbiorach DataFrame jest na tyle częstą operacją, że pandas oferuje alternatywę dla pętli – metodę groupby. W przykładowym kodzie groupby służy najpierw do grupowania obszarów spisowych według stanu, czyli wierszy o tej samej wartości w kolumnie "state". Metoda sum() jest stosowana dla każdej grupy do wybranych kolumn.

Ćwiczenie korzysta również z metody merge – kolejnego przydatnego narzędzia pandas – do połączenia zsumowanych wartości grupowych z poszczególnymi obszarami spisowymi. Na razie nie przejmuj się składnią. Metoda merge zostanie omówiona w dalszej części kursu.

Biblioteka pandas została zaimportowana z użyciem standardowego aliasu, a DataFrame tracts z kolumnami populacyjnymi white i black jest już załadowany. Zmienne w i b są zdefiniowane z nazwami kolumn "white" i "black".

To ćwiczenie jest częścią kursu

Analiza danych spisowych USA w Pythonie

Zobacz kurs

Instrukcje do ćwiczenia

  • Utwórz sums_by_state za pomocą groupby i wyświetl wynik.
  • Utwórz tracts za pomocą merge i wyświetl wynik.
  • Oblicz \(\left\lvert\frac{a_i}{A} - \frac{b_i}{B}\right\rvert\) i zapisz wynik w nowej kolumnie D. (Przypomnienie: Suma populacji białej i czarnej (\(A\) i \(B\)) została już obliczona i jest dostępna w DataFrame tracts w kolumnach z sufiksem "_sum").
  • Zsumuj kolumnę D według stanu za pomocą metody groupby i pomnóż przez 0.5.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

# 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())
Edytuj i uruchom kod