基于Python计算人口出生率、老年死亡率及代码排错咨询
问题排查与实现代码
现有代码逻辑错误
- 所有筛选条件没有做**与逻辑(&)**组合,单独的布尔Series只能判断单条件是否符合,无法筛选出同时满足性别、年龄要求的人群
- 对布尔Series调用
count()统计的是所有非空值的总数量,不会只统计符合条件(值为True)的行数,统计符合条件的人数需要调用sum() - 年龄筛选逻辑和需求不符:需求要求统计25-29岁女性,现有代码里的30-35岁范围完全不对
- 缺少核心统计字段的筛选:没有加入「过去一年是否生育」的判断条件,无法统计出生人口数
需求1:计算25-29岁女性每10万人出生数
前提假设:你的DataFrame中存在is_birth_last_year字段,取值为1/0或布尔值,代表该个体过去一年是否生育
# 筛选25-29岁女性的布尔条件 woman_25to29 = (df["Gender"] == "Female") & (df["Age"] >=25) & (df["Age"] <=29) # 统计25-29岁女性总人数 total_woman = woman_25to29.sum() # 统计该人群中过去一年生育的总人数(即出生人口数) total_birth = (woman_25to29 & (df["is_birth_last_year"] == 1)).sum() # 计算每10万人出生数 birth_per_100k = (total_birth / total_woman) * 100000 print(f"25-29岁女性每10万人出生数:{birth_per_100k:.2f}")
需求2:对比两个老年年龄段死亡率
前提假设:你的DataFrame中存在is_death_last_year字段,取值为1/0或布尔值,代表该个体过去一年是否死亡
def calc_death_rate(age_min, age_max): # 筛选对应年龄段人群 age_group = (df["Age"] >= age_min) & (df["Age"] <= age_max) total_people = age_group.sum() dead_people = (age_group & (df["is_death_last_year"] ==1)).sum() return dead_people / total_people # 计算两个年龄段的死亡率 rate_65to70 = calc_death_rate(65,70) rate_70to75 = calc_death_rate(70,75) print(f"65-70岁群体死亡率:{rate_65to70:.4%}") print(f"70-75岁群体死亡率:{rate_70to75:.4%}") print(f"70-75岁群体死亡率是65-70岁群体的{rate_70to75/rate_65to70:.2f}倍")
内容的提问来源于stack exchange,提问作者asli
相关产品推荐
相关产品推荐

