创建计算 D 的函数
计算差异指数(Index of Dissimilarity)需要多个步骤,而且具有很高的复用性。本练习中,您将创建我们在上一个练习中使用的函数 dissimilarity。该函数的输入参数包括:一个小区域地理单元(如 tract)的 DataFrame,以及 3 个列名——分别为群体 A 与群体 B 的人口计数两列,以及包含上级地理单元(如州或大都市区)名称或地理标识的列。
提醒一下,差异指数的公式为:
$$D = \frac{1}{2}\sum{\left\lvert \frac{a}{A} - \frac{b}{B} \right\rvert}$$
已按惯例导入了 pandas。代码中已为您完成了 groupby 和 merge。
本练习是课程的一部分
使用 Python 分析美国人口普查数据
练习说明
- 按公式计算绝对值符号内的表达式:\(A\) 和 \(B\) 的列名由参数
col_A和col_B分别加上后缀"_sum"构成。 - 对单列使用
sum方法会返回一个 Series;请使用to_frame()方法将该 Series 转换为 DataFrame。 - 在
tracts上测试新函数:按 MSA 名称计算白人与黑人之间的差异指数。
交互式实操练习
通过完成这段示例代码来试试这个练习。
def dissimilarity(df, col_A, col_B, group_by):
# Sum Group A and Group B by grouping column
grouped_sums = df.groupby(group_by)[[col_A, col_B]].sum()
tmp = pd.merge(df, grouped_sums, left_on = group_by,
right_index = True, suffixes = ("", "_sum"))
# Calculate inner expression
tmp["D"] = abs(____)
# Calculate Index of Dissimilarity and convert to DataFrame
return 0.5 * tmp.groupby(group_by)["D"].sum().____
msa_D = dissimilarity(msa_tracts, ____, ____, "msa_name")
print(msa_D.head())