開始使用免費開始

在 Pandas 中用分組計算 D

對 DataFrame 的子集合進行計算非常常見,因此 pandas 提供了迴圈以外的替代作法:groupby 方法。在範例程式碼中,groupby 先依州別將 tract 分組,也就是把 "state" 欄位值相同的列分到同一組。接著對各組的欄位套用 sum() 方法,做出「逐組彙總」。

這個練習也會用到 merge,這是另一個實用的 pandas 方法,用來把分組後的總和與各個 tract 連接起來。現在先不用擔心語法;merge 會在之後的課程再詳細說明。

pandas 已用一般慣用的別名匯入,且已載入含有人口欄位 whiteblacktracts DataFrame。變數 wb 也已分別定義為欄位名稱 "white""black"

本練習屬於課程

使用 Python 分析美國 Census 資料

檢視課程

練習說明

  • 使用 groupby 建立 sums_by_state,並印出結果。
  • 使用 merge 建立 tracts,並印出結果。
  • 計算 $\left\lvert\frac{a_i}{A} - \frac{b_i}{B}\right\rvert$,並儲存在新欄位 D 中。(提醒:White 與 Black 的總人口(\(A\) 與 $B$)已經計算好,位於 tracts DataFrame 中,欄位尾碼為 "_sum"。)
  • 使用 groupby 方法依州別彙總欄位 D,並乘上 0.5

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

# 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())
編輯並執行程式碼