You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何按指定年龄范围对数据透视表中的数据分组?

嘿,这个自定义年龄分组的问题我之前也碰到过!默认的固定增量分组确实没法满足你这种「开头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-2425-2930-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

火山引擎 最新活动