OpenRefine使用问题:如何将拆分的多行数据合并为单条记录?
同ID多行日期合并为单行的实现方案
以下是不同常用场景下的操作方法:
Excel 方案(小体量数据首选)
- 如果你使用的是Excel 365/2021及以上版本:
- 选中全部数据区域,切换到「数据」选项卡,选择「来自表格/区域」导入Power Query编辑器
- 选中ID列,点击「分组依据」,分组列选ID,新列名自定义为「合并日期」,操作选「连接值」,分隔符按需选择逗号、换行符等即可
- 如果你使用的是旧版本Excel,直接用公式实现:
在空白列第二行输入公式=TEXTJOIN(",",TRUE,IF($A$2:$A$[你的数据最大行号]=A2,$B$2:$B$[你的数据最大行号],"")),按Ctrl+Shift+Enter触发数组公式生效,下拉填充后对ID列去重即可。
Python Pandas 方案(中大体量数据首选)
核心用groupby聚合实现,示例代码如下:
import pandas as pd # 读取数据,可按需替换为read_excel等方法 df = pd.read_csv("你的数据文件路径") # 合并为逗号分隔的单日期列 merge_result = df.groupby("ID", as_index=False)["日期"].agg(",".join) # 如果需要把日期拆分为多列(date1、date2……),用以下代码 expand_result = df.groupby("ID")["日期"].apply(list).apply(pd.Series).reset_index() expand_result.columns = ["ID"] + [f"date_{i+1}" for i in range(expand_result.shape[1]-1)]
SQL 方案(数据库内数据首选)
不同数据库的聚合函数略有差异,对应语法如下:
- MySQL:
SELECT ID, GROUP_CONCAT(日期 SEPARATOR ',') AS all_dates FROM 你的表名 GROUP BY ID; - PostgreSQL:
SELECT ID, STRING_AGG(日期::VARCHAR, ',') AS all_dates FROM 你的表名 GROUP BY ID; - SQL Server:
SELECT ID, STRING_AGG(CAST(日期 AS VARCHAR), ',') AS all_dates FROM 你的表名 GROUP BY ID;
原问题数据集示例:
内容的提问来源于stack exchange,提问作者Hev
相关产品推荐
相关产品推荐


