如何按COLOUR列分组合并ID列、汇总QTY列并去重?
问题
需要对多列数据做如下处理:
- 按
COLOUR列的重复值分组 - 同组的
ID拼接成逗号分隔的字符串 - 汇总同组的
QTY数值 COLOUR列去重
ID和COLOUR各有数百个唯一值,常规方案无法匹配需求,求适配方法。
示例数据
| ID | COLOUR | QTY |
|---|---|---|
| A1 | BLUE | 1 |
| B1 | GREEN | 2 |
| A2 | BLUE | 1 |
| A3 | BLUE | 1 |
| B2 | GREEN | 1 |
预期结果
| ID | COLOUR | QTY |
|---|---|---|
| A1, A2, A3 | BLUE | 3 |
| B1, B2 | GREEN | 3 |
解决方案
1. Python Pandas(适合大数据量)
代码简洁高效,处理数百个唯一值毫无压力:
import pandas as pd # 假设数据已存入DataFrame df df = pd.DataFrame({ 'ID': ['A1', 'B1', 'A2', 'A3', 'B2'], 'COLOUR': ['BLUE', 'GREEN', 'BLUE', 'BLUE', 'GREEN'], 'QTY': [1, 2, 1, 1, 1] }) # 分组聚合处理 result = df.groupby('COLOUR').agg( ID=('ID', lambda x: ', '.join(x)), QTY=('QTY', 'sum') ).reset_index()[['ID', 'COLOUR', 'QTY']] print(result)
2. Excel(两种实现方式)
方法一:Power Query(推荐批量处理)
- 选中数据区域,点击「数据」→「从表格/区域」进入编辑器
- 点击「转换」→「分组依据」,分组列选
COLOUR,新增两个聚合项:- 列名
ID,操作选「所有行」;列名QTY,操作选「求和」、列选QTY
- 列名
- 点击
ID列的展开按钮,选择「提取值」,分隔符选「逗号+空格」 - 调整列顺序后,点击「关闭并上载」即可得到结果
方法二:公式组合(适合小批量)
- 提取唯一颜色:在空白单元格输入
=UNIQUE(B:B) - 汇总数量:对应单元格输入
=SUMIF(B:B, D2, C:C)(D2为唯一颜色单元格) - 拼接ID:对应单元格输入
=TEXTJOIN(", ", TRUE, IF(B:B=D2, A:A, "")),新版Excel直接回车,旧版按Ctrl+Shift+Enter
3. SQL(数据库场景)
不同数据库的字符串拼接函数略有差异,以下是主流实现:
MySQL/MariaDB
SELECT GROUP_CONCAT(ID SEPARATOR ', ') AS ID, COLOUR, SUM(QTY) AS QTY FROM your_table GROUP BY COLOUR;
PostgreSQL/SQL Server
SELECT STRING_AGG(ID, ', ') AS ID, COLOUR, SUM(QTY) AS QTY FROM your_table GROUP BY COLOUR;
内容的提问来源于stack exchange,提问作者Onyx87
相关产品推荐
相关产品推荐

