如何用单行代码按性别统计接种疫苗人群的患病比例?
按性别统计接种疫苗人群的患病比例解决方案
正确单行代码
df.groupby('gender').apply(lambda g: g[(g['vaccinated'] == 1) & (g['got sick'] == 1)].shape[0] / g[g['vaccinated'] == 1].shape[0])
原代码问题分析
- 字段名错误:你把DataFrame里的
got sick字段误写为sick,导致代码找不到对应列报错。 - 方法选择错误:
agg方法针对分组后的单个Series做聚合,无法同时访问分组内的多个列;而apply方法会将整个分组的DataFrame传入函数,支持同时处理多列逻辑。
可选优化(处理分母为0的情况)
如果某性别分组中没有接种疫苗的人,直接计算会触发除以0错误,可以添加判断规避:
df.groupby('gender').apply(lambda g: g[(g['vaccinated'] == 1) & (g['got sick'] == 1)].shape[0] / g[g['vaccinated'] == 1].shape[0] if g[g['vaccinated'] == 1].shape[0] > 0 else 0)
内容的提问来源于stack exchange,提问作者Cody Dance
相关产品推荐
相关产品推荐

