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

按指定列分组统计目标列中特定值的出现次数

按分组统计指定值的出现次数

你的DataFrame数据如下:

+-------------+--------+
|         x   |      y |
+-------------+--------+
|            a|     one| 
|            a|     one|
|            a|     two|
|            b|     one|
|            b|     two|  
|            c|     one| 
+-------------+--------+

你需要按x分组,统计每个分组中y列等于"one"的出现次数,原代码df.groupBy(x).agg(countDistinct("one")).collect()的问题在于:countDistinct接收的是列名而非具体值,这里把"one"当作列名会导致错误,因为你的DataFrame里没有名为"one"的列。

正确解法

以下两种方法都能实现需求:

方法1:使用when + count

利用when标记符合条件的行,再用count统计非Null值的数量:

from pyspark.sql import functions as F

# 分组统计
result_df = df.groupBy("x").agg(
    F.count(F.when(F.col("y") == "one", True)).alias("one_count")
)

# 提取结果值(按x的顺序排列可加orderBy)
output = [row.one_count for row in result_df.orderBy("x").collect()]
print(output)  # 输出: [2, 1, 1]

方法2:使用when + sum

将符合条件的行标记为1,不符合的标记为0,通过求和得到总次数:

from pyspark.sql import functions as F

# 分组统计
result_df = df.groupBy("x").agg(
    F.sum(F.when(F.col("y") == "one", 1).otherwise(0)).alias("one_count")
)

# 提取结果值
output = [row.one_count for row in result_df.orderBy("x").collect()]
print(output)  # 输出: [2, 1, 1]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:43:24