Python pandas问卷数据清洗:实现年龄区间分类重分组
Pandas 年龄列重分组实现方案
直接对原分类值调用groupby无法自动合并指定类别,先通过值映射把原有分类匹配到目标分组标签,再做后续统计/聚合即可。
映射规则说明
目标共2个分组,对应原分类映射关系如下:
<=25:合并原分类Between 18 -25、Under 18>=26:合并原分类Between 26 - 30、31 or more
具体实现代码
方法1:生成固定分组列(推荐)
先在数据表中新增分组列,后续可以直接复用做各类分析:
# 定义分类映射字典 age_group_map = { 'Between 18 -25': '<=25', 'Under 18': '<=25', 'Between 26 - 30': '>=26', '31 or more': '>=26' } # 新增年龄分组列,不需要保留原列也可以直接赋值给game['Age']覆盖 game['age_group'] = game['Age'].replace(age_group_map)
执行后可以通过值计数验证结果:
print(game['age_group'].value_counts())
得到的输出和预期一致:
<=25 141 >=26 28 Name: age_group, dtype: int64
后续要做分组统计,直接对新列调用groupby即可,例如统计不同年龄组的游戏时长均值:
game.groupby('age_group')['play_hours'].mean()
方法2:不修改原表临时分组
如果不想改动原数据表结构,可以在groupby中直接传入映射后的序列完成分组:
# 示例:直接统计各分组样本量 game.groupby(game['Age'].map(age_group_map)).size()
之前groupby未生效的原因
groupby会按照传入字段的现有唯一值做拆分,不会自动按照预期逻辑合并离散分类,必须先完成值到目标分组的映射转换,才能得到正确的分组结果。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

