如何编写从DataFrame取数计算分性别健康率的Python函数?
正确实现方案
原有代码核心问题
- 语法不符合Python规范:Python函数不用大括号
{}包裹代码块,靠缩进控制层级,else关键字必须全小写,函数返回不需要同步给变量赋值 - 参数缺失:你定义的函数没有传入
gender参数,无法判断用户性别 - 运算逻辑错误:比例计算公式缺少外层括号,会先执行除法再加法,得到完全错误的结果
- 设计逻辑错误:逐行调用
apply时,单条数据无法获取同性别全部人群的健康/不健康总数,没法直接计算比例
推荐实现方式(Pandas原生统计,效率最高)
不需要自定义复杂函数,直接用Pandas过滤+分组统计即可完成需求:
import pandas as pd # 构造示例DataFrame,你实际使用时替换成自己的数据源即可 data = { "ID": ["01", "02", "03", "04", "05"], "status": ["healthy", "un_healthy", "un_healthy", "healthy", "healthy"], "Age": [16, 14, 22, 12, 33], "Gender": ["Male", "Female", "Male", "Female", "Female"] } df = pd.DataFrame(data) # 第一步:过滤出15岁及以上的人群 df_adult = df[df["Age"] >= 15] # 第二步:按性别分组,计算各组健康人数/组内总人数的比例 gender_health_rate = df_adult.groupby("Gender")["status"].apply( lambda x: (x == "healthy").sum() / x.count() ) # 输出结果 print("男性健康率:", gender_health_rate.get("Male", 0)) print("女性健康率:", gender_health_rate.get("Female", 0))
运行结果说明
结合你给出的示例数据,运行后输出为:
- 男性健康率:0.5(15岁以上男性共2人,1人健康)
- 女性健康率:1.0(15岁以上女性共1人,1人健康)
内容的提问来源于stack exchange,提问作者Nora S
相关产品推荐
相关产品推荐

