Python基于DataFrame的groupby分组计算不同原籍国学生汽车拥有比例
Pandas groupby实现分国家学生汽车拥有比例计算
核心实现逻辑
计算不同原生国家的学生汽车拥有率,操作逻辑非常直接:
- 按
student-native-country字段对全量学生数据做分组 - 对每个分组统计组内
car-owner值为Y的人数,除以该组总人数,得到对应群体的汽车拥有比例
这种计算方式的优势是,哪怕某个国家的学生全部没有汽车,分组结果也不会丢失该国家的条目,比例值会自动计算为0,无需额外做补全处理。
具体实现代码
import pandas as pd # 载入原始DataFrame(实际使用时可替换为本地文件读取逻辑,如pd.read_csv/pd.read_excel) raw_data = [ ["M", "BS", "Cuba", "N"], ["F", "BS", "Brazil", "N"], ["F", "BS", "US", "N"], ["M", "MS", "US", "Y"], ["F", "MS", "US", "N"], ["M", "BS", "Cuba", "N"], ["F", "BS", "Brazil", "N"], ["F", "MS", "US", "N"], ["F", "MS", "US", "N"], ["M", "BS", "Cuba", "Y"], ["F", "BS", "Brazil", "N"] ] df = pd.DataFrame( raw_data, columns=["student-gender", "student-current-enrollment", "student-native-country", "car-owner"] ) # 按国家分组计算汽车拥有比例 ratio_result = df.groupby("student-native-country")["car-owner"].apply( lambda group: (group == "Y").mean() )
示例数据的计算结果
针对给出的测试数据集,代码运行后输出的比例值为:
- Cuba:0.333(即33.3%,组内共3名学生,其中1人拥有汽车)
- Brazil:0(即0%,组内共3名学生,无人拥有汽车)
- US:0.2(即20%,组内共5名学生,其中1人拥有汽车)
扩展统计用法
如果需要同时输出每个国家的总学生数、汽车拥有人数、汽车拥有比例的完整统计表格,可以通过多聚合方法实现:
country_full_stats = df.groupby("student-native-country")["car-owner"].agg( total_student_count="count", car_owner_total=lambda x: (x == "Y").sum(), car_owner_ratio=lambda x: (x == "Y").mean() )
注意:如果原始数据存在空值(比如部分学生未填写汽车拥有状态),需要在分组统计前用
df.dropna(subset=["car-owner"])过滤无效记录,避免统计结果出现偏差。
内容的提问来源于stack exchange,提问作者Saqib Ali
相关产品推荐
相关产品推荐

