开始使用免费开始使用

创建计算 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。代码中已为您完成了 groupbymerge

本练习是课程的一部分

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

查看课程

练习说明

  • 按公式计算绝对值符号内的表达式:\(A\) 和 \(B\) 的列名由参数 col_Acol_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())
编辑并运行代码