如何按指定年龄范围对数据透视表中的数据分组?
嘿,这个自定义年龄分组的问题我之前也碰到过!默认的固定增量分组确实没法满足你这种「开头18-24(7年区间)、后续统一5年区间到64,最后设65+」的需求,不过咱们换个思路就能解决,下面分几种常用工具给你详细说:
Excel 操作方法
方法1:辅助列法(最稳妥直观)
这是我最常用的方法,完全避开透视表的分组限制:
- 第一步:在原数据右侧新增一列,命名为
年龄分组 - 第二步:用嵌套IF函数判断每个用户的年龄所属分组(假设当前年份是2024,你可以根据实际年份修改):
在第一个用户的年龄分组单元格输入公式:
按下回车后,把公式下拉应用到所有行,就能自动生成每个人的分组。=IF(2024-B2<18,"<18",IF(2024-B2<=24,"18-24",IF(2024-B2<=29,"25-29",IF(2024-B2<=34,"30-34",IF(2024-B2<=39,"35-39",IF(2024-B2<=44,"40-44",IF(2024-B2<=49,"45-49",IF(2024-B2<=54,"50-54",IF(2024-B2<=59,"55-59",IF(2024-B2<=64,"60-64","65+"))))))))) - 第三步:创建透视表时,把
年龄分组拖到「行」区域,username拖到「值」区域选择「计数」,完美得到你要的分组统计。
方法2:透视表内手动自定义分组
如果不想加辅助列,也可以直接在透视表里操作:
- 第一步:先新增一列
年龄(公式=2024-B2),然后创建基础透视表,把年龄拖到「行」区域。 - 第二步:选中透视表中所有的年龄行标签,右键选择「组」,在弹出的分组对话框里,删除默认的起始、步长设置,点击「添加」按钮手动输入每个区间:
依次添加18-24、25-29、30-34……60-64,确定后,透视表会把不在这些区间的年龄归为「其他」,最后右键重命名为「65+」即可。
Google Sheets 操作方法
和Excel思路类似,不过用IFS函数更简洁:
- 新增
年龄分组列,输入公式:
下拉应用后,创建透视表,把=IFS(2024-B2<18,"<18",2024-B2<=24,"18-24",2024-B2<=29,"25-29",2024-B2<=34,"30-34",2024-B2<=39,"35-39",2024-B2<=44,"40-44",2024-B2<=49,"45-49",2024-B2<=54,"50-54",2024-B2<=59,"55-59",2024-B2<=64,"60-64",TRUE,"65+")年龄分组拖到行,username拖到值计数即可。 - 透视表内分组的操作和Excel类似,选中年龄行标签右键「创建分组」,手动添加区间后重命名「其他」为「65+」。
Python Pandas 代码实现(适合数据量较大的场景)
如果用代码处理数据,pandas的cut函数可以完美实现自定义分组:
import pandas as pd # 构建原始数据 data = [ ["Albert Albo", 1977], ["Bob Bilo", 1974], ["Conan Cornic", 1989], ["Don Duan", 1954], ["Etan Etin", 1967], ["Fabio Forio", 1976] ] df = pd.DataFrame(data, columns=["username", "year_of_birth"]) # 计算年龄 current_year = 2024 df["age"] = current_year - df["year_of_birth"] # 定义分组区间和对应标签 bins = [0, 17, 24, 29, 34, 39, 44, 49, 54, 59, 64, float("inf")] labels = ["<18", "18-24", "25-29", "30-34", "35-39", "40-44", "45-49", "50-54", "55-59", "60-64", "65+"] df["age_group"] = pd.cut(df["age"], bins=bins, labels=labels, right=True) # 生成透视表 pivot_table = df.pivot_table(index="age_group", values="username", aggfunc="count").rename(columns={"username": "人数"}) print(pivot_table)
运行后就能得到按自定义分组统计的结果。
内容的提问来源于stack exchange,提问作者Hugo LOPEZ




