如何按NAME和DATE转置表格并合并val值为单个变量?
按NAME和Date分组拼接val值的实现方法
原始数据表格
| NAME | Instance | Date | val |
|---|---|---|---|
| John | 1 | 2019 | 12Y |
| John | 2 | 2019 | 32dd |
| John | 3 | 2019 | 23F |
| John | 1 | 2020 | 43s |
| John | 1 | 2022 | 23G |
| Mary | ... | ... | ... |
目标格式表格
| NAME | Date | Val |
|---|---|---|
| John | 2019 | 12Y, 32dd, 23F |
| John | 2020 | 43s |
| John | 2022 | 23G |
| Marie | ... | ... |
以下是几种常用工具的实现方式:
1. Excel/Google Sheets 实现
方法一:TEXTJOIN函数(Excel 2019+、Google Sheets通用)
在空白单元格输入公式(假设数据在A2:D7区域):
=TEXTJOIN(", ", TRUE, IF((A$2:A$7=A2)*(C$2:C$7=C2), D$2:D$7, ""))
- Excel需按
Ctrl+Shift+Enter触发数组计算;Google Sheets直接回车即可 - 下拉填充公式后,删除重复的NAME+Date行
方法二:Power Query(Excel高效批量处理)
- 选中数据区域,点击「数据」→「从表格/区域」(勾选「我的表格有标题」)
- 在Power Query编辑器中,点击「转换」→「分组依据」
- 分组设置:添加
NAME、Date两个分组列,新列名设为Val,操作选「聚合」→「合并列」,分隔符选逗号 - 点击「关闭并上载」,直接生成目标格式表格
2. Python Pandas 实现
import pandas as pd # 读取原始数据(可替换为CSV、Excel或直接构造DataFrame) df = pd.read_csv("your_data.csv") # 分组拼接val值 result_df = df.groupby(['NAME', 'Date'])['val'].agg(', '.join).reset_index() # 重命名列(按需调整) result_df.columns = ['NAME', 'Date', 'Val'] # 输出或保存结果 print(result_df) result_df.to_csv("result.csv", index=False)
3. SQL 实现
根据不同数据库使用对应字符串聚合函数:
MySQL/MariaDB
SELECT NAME, Date, GROUP_CONCAT(val SEPARATOR ', ') AS Val FROM your_table GROUP BY NAME, Date;
PostgreSQL/SQL Server
SELECT NAME, Date, STRING_AGG(val, ', ') AS Val FROM your_table GROUP BY NAME, Date;
Oracle
SELECT NAME, Date, LISTAGG(val, ', ') WITHIN GROUP (ORDER BY Instance) AS Val FROM your_table GROUP BY NAME, Date;
内容的提问来源于stack exchange,提问作者KevinC
相关产品推荐
相关产品推荐

