R dataframe中如何根据指定列分组将其他列元素合并为列表
Python(pandas 实现)
如果你用Python做数据处理,直接用pandas的分组聚合接口即可:
import pandas as pd # 构造示例数据,实际使用时直接读取你的源数据即可 df = pd.DataFrame({ 'col1': ['x','x','x','y','y','y'], 'col2': [1,2,3,1,2,3], 'col3': [4,5,6,4,5,6] }) # 按col1分组,其余列聚合为列表 result = df.groupby('col1', as_index=False).agg(list)
输出的result就是你需要的目标表格结构。
SQL 实现
主流新版数据库(MySQL 8.0+、PostgreSQL、SQLite 3.30+等)都支持JSON_ARRAYAGG函数实现该需求:
SELECT col1, JSON_ARRAYAGG(col2 ORDER BY col2) AS col2, JSON_ARRAYAGG(col3 ORDER BY col3) AS col3 FROM 你的表名 GROUP BY col1;
如果是不支持JSON函数的旧版MySQL,可以用GROUP_CONCAT手动拼接列表格式:
SELECT col1, CONCAT('[', GROUP_CONCAT(col2 ORDER BY col2 SEPARATOR ', '), ']') AS col2, CONCAT('[', GROUP_CONCAT(col3 ORDER BY col3 SEPARATOR ', '), ']') AS col3 FROM 你的表名 GROUP BY col1;
Excel/Google Sheets 实现
假设你的原始数据A列为col1、B列为col2、C列为col3:
- 先提取col1的唯一值到E列,公式:
=UNIQUE(A:A) - E2对应行的F列(col2结果)输入公式:
="["&TEXTJOIN(", ",TRUE,FILTER(B:B,A:A=E2))&"] - E2对应行的G列(col3结果)输入公式:
="["&TEXTJOIN(", ",TRUE,FILTER(C:C,A:A=E2))&"] - 下拉公式填充所有唯一col1行即可,该方法适用于Excel 365及所有版本的Google Sheets。
内容的提问来源于stack exchange,提问作者blub_9
相关产品推荐
相关产品推荐

