You need to enable JavaScript to run this app. Python基于DataFrame的groupby分组计算不同原籍国学生汽车拥有比例
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 06:24:03