开始使用免费开始使用

在 Pandas 中使用分组计算 D

对 DataFrame 的子集执行计算非常常见,因此 pandas 提供了无需使用循环的替代方式:groupby 方法。在示例代码中,先用 groupby 按州分组街区(tract),也就是按 "state" 列中相同取值将行归为一组。随后对各列按组应用 sum() 方法。

本练习还用到了 merge,这是另一个很有用的 pandas 方法,用于将分组求和的结果与各个街区行进行连接。现在先不必担心其语法,merge 会在后续课程中讲解。

pandas 已按常用别名导入,包含人口列 whiteblacktracts DataFrame 已加载。变量 wb 分别被定义为列名 "white""black"

本练习是课程的一部分

使用 Python 分析美国人口普查数据

查看课程

练习说明

  • 使用 groupby 创建 sums_by_state 并打印结果。
  • 使用 merge 创建 tracts 并打印结果。
  • 计算 $\left\lvert\frac{a_i}{A} - \frac{b_i}{B}\right\rvert$,并将其存入新列 D。(提醒:白人和黑人总人口数(\(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())
编辑并运行代码