如何用Pandas将非合并单元格转换为合并单元格?附场景示例
多行数据按ID合并为单行(保留原始顺序)的解决方案
需求说明
将Excel中同一ID对应的多行数据合并为单行,保留各字段值的原始顺序,仅做格式转换,无需聚合计算。
可行方案(基于Python pandas)
利用groupby分组后,通过聚合函数将每个分组内的字段值按原始顺序收集为列表,可按需转为分隔符连接的字符串。
步骤代码
import pandas as pd # 1. 读取Excel文件(若日期为格式需解析,添加parse_dates参数) df = pd.read_excel('你的文件路径.xlsx', parse_dates=['EFFECTIVE FROM DATE']) # 2. 按ID分组,将每个字段转为列表(保留原始顺序) merged_df = df.groupby('ID', as_index=False).agg(lambda x: x.tolist()) # 3. 可选:将列表转为逗号分隔的字符串(可自定义分隔符,比如换行符'\n') for col in merged_df.columns[1:]: # 处理空值(nan),转为空字符串 merged_df[col] = merged_df[col].apply(lambda x: ', '.join([str(i) if pd.notna(i) else '' for i in x])) # 4. 保存合并后的结果到新Excel merged_df.to_excel('合并结果.xlsx', index=False)
示例测试
针对你提供的示例数据,执行上述代码后,合并结果如下:
ID FINANCIAL CLASS RESTR PAYOR RESTR ... LOCATION RESTR EFFECTIVE FROM DATE ACTIVE FLAG 0 80 BLUE CROSS, COMMERCIAL, COMMERCIAL, MEDICARE, COMMERCIAL 200001, 100001, 100009, 400001, 100060 ... , , , , 2000-01-01, 1995-08-01, 2022-10-01, 2000-01-01, 1995-01-01 1, 1, 1, 1, 1
(注:示例中的日期数字已转为实际日期格式)
关键说明
groupby默认会保留组内数据的原始顺序,只要读取的Excel数据顺序未被打乱。- 若需要其他分隔形式(如换行、分号),只需修改
join中的分隔符即可。 - 空值
nan会被转为空字符串,避免合并后出现nan字样。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

