如何提取数据列唯一值并将对应行数据合并至同一行
按Item分组合并Value值的实现方案
这个需求的核心逻辑是对Item列做去重分组,将同组内的所有Value值用指定分隔符拼接为单个字符串,以下是不同常用工具下的可直接复用的实现方法:
Excel/WPS 表格实现
- 高版本(365/2021及以上):先将Item列复制到空白列,通过「数据」选项卡的「删除重复值」功能得到A、B、C三个唯一Item值。假设原始数据的Item在A列、Value在B列,数据范围为A2:B9,去重后的Item在D列,在E2单元格输入公式
=TEXTJOIN(",",TRUE,IF($A$2:$A$9=D2,$B$2:$B$9,"")),365版本直接回车即可,旧版本按Ctrl+Shift+Enter触发数组计算,下拉公式就能得到所有拼接结果。 - 低版本无
TEXTJOIN函数:用Power Query零代码实现,选中原始数据区域,点击「数据」-「从表格/区域」加载到PQ编辑器,选中Item列后点击「分组依据」,新列命名为Value,操作选择「所有行」,之后添加自定义列,输入公式Text.Combine([Value][Value], ","),删除多余辅助列后将结果上载回工作表即可。
- 高版本(365/2021及以上):先将Item列复制到空白列,通过「数据」选项卡的「删除重复值」功能得到A、B、C三个唯一Item值。假设原始数据的Item在A列、Value在B列,数据范围为A2:B9,去重后的Item在D列,在E2单元格输入公式
Python pandas 实现
读入数据后直接调用分组聚合方法即可,示例代码如下:import pandas as pd # 示例数据集,实际使用时替换为pd.read_excel()/pd.read_csv()等读文件代码 df = pd.DataFrame({ 'Item': ['A','A','A','B','B','B','C','C'], 'Value': [1,2,3,1,2,3,1,2] }) # 分组按逗号拼接Value res = df.groupby('Item', as_index=False)['Value'].apply(lambda x: ','.join(map(str, x)))运行后输出的
res就是目标格式的结果,如果Value列本身是字符串类型,可以去掉map(str, )的转换逻辑。SQL 实现
不同数据库的字符串聚合函数略有区别,对应写法如下:- MySQL/MariaDB:用内置
GROUP_CONCAT函数SELECT Item, GROUP_CONCAT(Value SEPARATOR ',') AS Value FROM 你的表名 GROUP BY Item; - PostgreSQL:用
STRING_AGG函数,可直接指定排序规则SELECT Item, STRING_AGG(Value::text, ',' ORDER BY Value) AS Value FROM 你的表名 GROUP BY Item; - SQL Server 2017及以上版本:用
STRING_AGG函数SELECT Item, STRING_AGG(Value, ',') AS Value FROM 你的表名 GROUP BY Item;
- MySQL/MariaDB:用内置
注意:如果需要Value按固定顺序拼接,在所有方法里都可以提前对原始数据按Value列排序后再做聚合,避免拼接顺序不符合预期。
内容的提问来源于stack exchange,提问作者excel_noob
相关产品推荐
相关产品推荐

