如何基于多列实现值的Concatenate/Join/Merge操作?
基于多列匹配实现姓名拼接的方案
初始数据
| 姓名 | 身高 | 体重 | 班级编号 |
|---|---|---|---|
| Mark | 1m80 | 80kg | 1 |
| Steve | 1m60 | 60kg | 2 |
| Bob | 1m60 | 60kg | 2 |
需求:当身高、体重、班级编号三列值完全匹配时,将对应姓名拼接为逗号分隔的字符串,最终得到只包含重复组的结果。
解法1:Excel 操作
用TEXTJOIN数组公式实现分组拼接:
- 在空白单元格输入公式,按
Ctrl+Shift+Enter(Excel 365/2021版本可直接回车):
=TEXTJOIN(",",TRUE,IF((B:B=B2)*(C:C=C2)*(D:D=D2),A:A,""))
- 若只想保留有多个姓名的组,可配合筛选或直接用
UNIQUE+FILTER组合:
=UNIQUE(FILTER(TEXTJOIN(",",TRUE,IF((B:B=B2)*(C:C=C2)*(D:D=D2),A:A,"")),COUNTIFS(B:B,B2,C:C,C2,D:D,D2)>1))
解法2:Python Pandas 实现
通过分组聚合快速完成拼接:
import pandas as pd # 构造初始数据 df = pd.DataFrame({ "姓名": ["Mark", "Steve", "Bob"], "身高": ["1m80", "1m60", "1m60"], "体重": ["80kg", "60kg", "60kg"], "班级编号": [1, 2, 2] }) # 按目标列分组,拼接姓名后筛选出多姓名组 grouped = df.groupby(["身高", "体重", "班级编号"])["姓名"].agg(",".join) result = grouped[grouped.str.contains(",")].reset_index() # 调整列名并移除冗余列 result = result.rename(columns={"姓名": "具有共同特征(身高、体重、班级编号)的人员姓名"}).drop(["身高", "体重", "班级编号"], axis=1) print(result)
输出结果:
具有共同特征(身高、体重、班级编号)的人员姓名 0 Steve,Bob
内容的提问来源于stack exchange,提问作者LiquidSnake
相关产品推荐
相关产品推荐

