Pandas练习疑问:分组求均值代码与参考答案的底层差异
两种代码的底层逻辑差异
你的代码:计算职业-性别分组的平均年龄
users.groupby(['occupation', 'gender']).age.mean()
- 执行逻辑:
- 以
occupation(职业)和gender(性别)为双重分组键,把数据集拆分为多个「特定职业+特定性别」的子组 - 对每个子组的
age列计算平均值,得到该组人群的平均年龄
- 以
- 结果含义:每个数值对应某职业下某性别的平均年龄,数值范围通常在常规年龄区间(如20-60)
参考答案:计算各职业内的性别占比(百分比)
# 统计每个职业-性别组合的人数 gender_ocup = users.groupby(['occupation', 'gender']).agg({'gender': 'count'}) # 统计每个职业的总人数 occup_count = users.groupby(['occupation']).agg('count') # 计算占比并转换为百分比 occup_gender = gender_ocup.div(occup_count, level = "occupation") * 100 # 提取最终结果列 occup_gender.loc[: , 'gender']
- 执行逻辑:
gender_ocup:按「职业+性别」分组,统计每个组合的用户数量(用gender列计数等价于统计该分组的总行数)occup_count:仅按「职业」分组,统计每个职业的总用户数(agg('count')会统计所有列的非空行数,这里等同于该职业的总人数)div(..., level="occupation"):按occupation层级对齐数据,用每个「职业-性别」的人数除以对应职业的总人数,得到占比后乘100转为百分比- 最后提取
gender列,得到各职业内不同性别的占比数据
- 结果含义:每个数值对应某职业下某性别人群的占比,数值范围在0-100之间
结果差异的核心原因
两者解决的是完全不同的统计需求:你的代码对应「职业-性别分组的平均年龄」问题,而参考答案对应「各职业内性别分布占比」问题,属于练习中不同的题目要求,因此输出结果的数值含义、范围完全不同。
内容的提问来源于stack exchange,提问作者MetalMentos
相关产品推荐
相关产品推荐

