Bắt đầu ngayBắt đầu miễn phí

Tính D bằng Grouping trong Pandas

Việc tính toán trên các tập con của một DataFrame là thao tác quá phổ biến nên pandas cung cấp một cách thay thế cho vòng lặp: phương thức groupby. Trong mã mẫu, groupby được dùng trước để nhóm các tract theo bang, tức là những hàng có cùng giá trị ở cột "state". Phương thức sum() được áp dụng theo từng nhóm lên các cột.

Bài tập này cũng sử dụng merge, một phương thức hữu ích khác của pandas, để nối (join) tổng theo nhóm vào từng tract riêng lẻ. Chưa cần lo về cú pháp lúc này. merge sẽ được giải thích ở bài sau.

pandas đã được import với bí danh quen thuộc, và DataFrame tracts chứa các cột dân số whiteblack đã được nạp. Các biến wb đã được gán với tên cột "white""black".

Bài tập này là một phần của khóa học

Phân tích dữ liệu Điều tra Dân số Hoa Kỳ bằng Python

Xem khóa học

Hướng dẫn bài tập

  • Tạo sums_by_state bằng groupby và in kết quả.
  • Tạo tracts bằng merge và in kết quả.
  • Tính \(\left\lvert\frac{a_i}{A} - \frac{b_i}{B}\right\rvert\) và lưu vào cột mới D. (Lưu ý: Tổng dân số White và Black (\(A\) và \(B\)) đã được tính sẵn và có trong DataFrame tracts ở các cột có hậu tố "_sum").
  • Cộng (sum) cột D theo bang bằng phương thức groupby, rồi nhân với 0.5.

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

# 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())
Chỉnh sửa và Chạy Mã