如何根据相同公司名拼接对应服务字段的行值为列表?
实现思路
核心操作逻辑为按company字段对全表分组,将同一公司下的所有service值聚合为列表,下面分两种常用环境给出可直接运行的实现方案:
方案1:Python Pandas(本地结构化数据处理场景)
- 导入依赖并加载/构造原始两列数据
import pandas as pd df = pd.DataFrame({ "service": ["sequencing", "RNA tests", "Cell tests", "consulting", "DNA tests", "mouse test"], "company": ["Fischer", "Fischer", "23andMe", "UCLA", "UCLA", "UCLA"] }) - 执行分组聚合,生成目标格式结果
参数说明:result = df.groupby("company", as_index=False, sort=False)["service"].agg(service_list=list)as_index=False:避免把分组字段company转为DataFrame索引,保持普通列的表结构sort=False:保留原始数据中公司的首次出现顺序,避免自动按公司名字母排序打乱输出顺序
- 最终输出结构完全匹配预期:
service_list | company ------------------------------------------------- ['sequencing','RNA tests'] | Fischer ['Cell tests'] | 23andMe ['consulting','DNA tests','mouse test']| UCLA
补充调整:
- 若需要对同组内重复的service值去重,同时保留原始数据里service的出现顺序,可替换聚合逻辑为:
result = df.groupby("company", as_index=False, sort=False)["service"].agg( service_list=lambda s: list(dict.fromkeys(s)) )
方案2:SQL(数据库/数仓处理场景)
如果原始数据存储在数据库、数据仓库中,可使用内置的列表聚合函数实现同等效果:
SELECT company, collect_list(service) AS service_list FROM 原始数据表名 GROUP BY company;
注意:不同数据库对聚合函数的命名存在差异,例如PostgreSQL中该函数名为
array_agg,Oracle需用对应的数组聚合函数实现列表效果,可根据实际使用的数据库调整函数名。
内容的提问来源于stack exchange,提问作者Brian Guan
相关产品推荐
相关产品推荐

