You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark DataFrame年龄分桶统计:按10年区间分组计算数量

如何用PySpark对年龄按10年区间分桶并统计数量?

嗨,我来帮你搞定这个需求!要实现按10年区间(比如11-20、21-30)对年龄分桶并统计每个区间的条目数,我们可以通过计算区间标签+分组聚合的方式轻松实现,下面是具体步骤和完整代码:

核心思路

  1. 计算区间边界:对每个年龄值,先算出它所属区间的起始和结束值(比如21对应21-30,35对应31-40)
  2. 生成区间标签:把起始和结束值拼接成"21-30"这样的字符串,作为分桶的标识
  3. 分组统计:按区间标签分组,统计每个组的条目数量

完整代码示例

from pyspark.sql import SparkSession
from pyspark.sql.functions import concat_ws, floor, col, count

# 初始化SparkSession(如果你的环境已经有了可以跳过这步)
spark = SparkSession.builder.appName("AgeBucketStats").getOrCreate()

# 构建示例输入DataFrame
sample_data = [(21,), (23,), (35,), (39,)]
age_df = spark.createDataFrame(sample_data, ["age"])

# 第一步:生成年龄区间标签
bucketed_age_df = age_df.withColumn(
    "age_bucket",
    concat_ws(
        "-",
        # 计算区间起始值:比如21→21,35→31
        (floor((col("age") - 1) / 10) * 10 + 1).cast("string"),
        # 计算区间结束值:比如21→30,35→40
        (floor((col("age") - 1) / 10) * 10 + 10).cast("string")
    )
)

# 第二步:按区间分组统计数量
result_df = bucketed_age_df.groupBy("age_bucket").agg(count("*").alias("count"))

# 查看结果
result_df.show()

运行这段代码后,你会得到和预期一致的输出:

+----------+-----+
|age_bucket|count|
+----------+-----+
|    21-30|    2|
|    31-40|    2|
+----------+-----+

关键代码解释

  • 区间计算逻辑:floor((col("age") - 1) / 10) * 10 +1 是核心,它能把所有年龄精准映射到对应的区间起始值:
    • 比如21:(21-1)/10=2 → floor后是2 → 2*10+1=21
    • 比如10:(10-1)/10=0.9 → floor后是0 → 0*10+1=1(所以10会被分到1-10区间)
  • concat_ws:用来把起始和结束值用连字符拼接成友好的区间字符串
  • groupBy + agg(count):按区间分组后,统计每个组的行数,并重命名为count

扩展:处理特殊情况(比如0岁)

如果你的数据里有0岁的情况,想要单独分桶,可以加个when条件处理:

from pyspark.sql.functions import when, lit

bucketed_age_df = age_df.withColumn(
    "age_bucket",
    when(
        col("age") == 0,
        lit("0")
    ).otherwise(
        concat_ws(
            "-",
            (floor((col("age") - 1) / 10) * 10 + 1).cast("string"),
            (floor((col("age") - 1) / 10) * 10 + 10).cast("string")
        )
    )
)

这样0岁就会被单独归类到"0"这个桶里,其他年龄正常分区间~

内容的提问来源于stack exchange,提问作者Nightwing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:28:55