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

Spark能否实现先按col1、col2分组,再统计col3、col4的分组计数?

当然可以实现!用Pandas就能轻松搞定这个需求,下面是具体的实现步骤和代码示例:

具体实现方案

1. 准备工作

首先导入Pandas库,然后构造你提供的示例数据:

import pandas as pd

# 构造输入示例数据
df = pd.DataFrame({
    'col1': [1, 1, 1],
    'col2': [1, 1, 1],
    'col3': [2, 2, 3],
    'col4': [4, 4, 5]
})

2. 重塑数据格式

我们需要把原DataFrame的宽表结构转成窄表结构,用melt方法就能实现,这样可以把col3、col4合并成“列名”和“列值”两列,方便后续统一统计:

# 转成窄表:保留col1、col2作为标识列,col3、col4作为待统计的列
melted_df = df.melt(id_vars=['col1', 'col2'], var_name='col_name', value_name='col_value')

这一步之后,melted_df的结构是这样的:

col1  col2 col_name  col_value
0     1     1     col3          2
1     1     1     col3          2
2     1     1     col3          3
3     1     1     col4          4
4     1     1     col4          4
5     1     1     col4          5

3. 分组统计计数

接下来按col1、col2、col_name、col_value分组,然后统计每组的数量:

# 分组并计数,最后重置索引
result = melted_df.groupby(['col1', 'col2', 'col_name', 'col_value']).size().reset_index(name='cnt')

4. 查看最终结果

打印result就能得到你想要的输出格式:

print(result)

输出结果和你提供的示例完全一致:

col1  col2 col_name  col_value  cnt
0     1     1     col3          2    2
1     1     1     col3          3    1
2     1     1     col4          4    2
3     1     1     col4          5    1

关键逻辑说明

  • melt方法是核心:它把多列(col3、col4)转换成“列名-列值”的成对形式,让原本分散的统计项变成统一的结构,避免重复写两次统计逻辑。
  • groupby+size():按指定的键分组后,size()会返回每组的行数,也就是你需要的计数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:12:27