按省份分组计算DataFrame中profession列为'teacher'的条目占比
Pandas按组计算指定职业占组内总条目比例的实现方法
groupby 后调用 value_counts 时传入 normalize=True 参数,默认就是按当前分组的总条目数计算占比,不会使用全局统计值,刚好匹配你的需求。
实现代码
第一步:构造示例测试数据
import pandas as pd df = pd.DataFrame({ 'province': ['北京', '北京', '北京', '上海', '上海', '广东', '广东', '广东', '广东'], 'profession': ['teacher', 'doctor', 'teacher', 'teacher', 'engineer', 'doctor', 'teacher', 'teacher', 'lawyer'] })
方法1:基于value_counts的简洁实现
# 分组后计算组内各职业占比,筛选teacher的占比并转成百分比格式 result = df.groupby('province')['profession'].value_counts(normalize=True).loc[:, 'teacher'] * 100 # 格式化输出,保留2位小数 result = result.round(2).reset_index(name='teacher占比(%)') print(result)
方法2:基于自定义规则的灵活实现
适合需要扩展统计规则的场景,逻辑更直观
result = df.groupby('province').apply( lambda x: (x['profession'] == 'teacher').sum() / len(x) * 100 ).round(2).reset_index(name='teacher占比(%)') print(result)
输出示例
两种方法的输出完全一致:
province teacher占比(%) 0 北京 66.67 1 上海 50.00 2 广东 50.00
内容的提问来源于stack exchange,提问作者Cody Kane
相关产品推荐
相关产品推荐

