如何在Pandas(Python)中对年龄分组并生成职业资格频率表
解决方案
我们可以用Pandas的pd.cut()完成年龄区间分组,再通过分组聚合获取每个组中出现次数最多的职业资格,具体步骤如下:
1. 导入依赖并构造DataFrame
import pandas as pd # 构造目标数据 data = { '年龄': [45, 49, 29, 61, 45, 37, 17, 56, 47], '职业资格': ['体力劳动者', '体力劳动者', '体力劳动者', '体力劳动者', '体力劳动者', '体力劳动者', '办公室职员', '体力劳动者', '办公室职员'] } df = pd.DataFrame(data)
2. 定义年龄区间并完成分组
指定你需要的区间边界,注意区间的开闭规则:
# 定义区间边界,对应(,17)、(17,29)、(30,40)、(40,50)、(50,) bins = [-float('inf'), 17, 29, 40, 50, float('inf')] labels = ['(,17)', '(17,29)', '(30,40)', '(40,50)', '(50,)'] # 为年龄列添加分组标签 df['年龄组'] = pd.cut(df['年龄'], bins=bins, labels=labels, include_lowest=True)
3. 聚合获取每组的众数职业资格
通过groupby()结合mode()提取每个组中出现次数最多的职业资格:
# 分组后取职业资格的众数,若存在多个众数则取第一个 result = df.groupby('年龄组')['职业资格'].agg(lambda x: x.mode()[0]).reset_index() # 重命名列名匹配示例格式 result.columns = ['年龄', '职业资格'] # 输出最终结果 print(result)
执行后得到的结果如下:
| 年龄 | 职业资格 |
|---|---|
| (,17) | 办公室职员 |
| (17,29) | 体力劳动者 |
| (30,40) | 体力劳动者 |
| (40,50) | 体力劳动者 |
| (50,) | 体力劳动者 |
补充说明
pd.cut()的include_lowest=True参数确保17岁被划分到(,17)区间mode()[0]保证在组内出现多个众数时,默认取第一个结果,满足需求
内容的提问来源于stack exchange,提问作者DataScientist99
相关产品推荐
相关产品推荐

