pandas如何合并DataFrame中被拆分的特定行数据
pandas读取Excel后多行拆分内容合并方案
问题场景
使用pandas的read_excel方法读取Excel文件生成DataFrame时,会出现字符串列的部分内容被拆分到后续多行的情况,调整导入参数无法修复,需要对拆分内容做合并还原。
示例原始DataFrame结构:
{ 'CODE': ['A', None, 'B', None, None, 'C'], 'TEXT': ['A', 'a', 'B', 'b', 'b', 'C'], 'NUMBER': ['1', None, '2', None, None,'3'] }
目标合并后结构:
{ 'CODE': ['A','B','C'], 'TEXT': ['Aa','Bbb','C'], 'NUMBER': ['1','2','3'] }
实现代码
核心逻辑是通过向前填充主键列生成分组键,按组拼接拆分的字符串、提取对应非空属性值:
import pandas as pd # 此处替换为你实际读取Excel的代码 # df = pd.read_excel("你的文件路径.xlsx") # 测试用原始数据 df = pd.DataFrame({ 'CODE': ['A', None, 'B', None, None, 'C'], 'TEXT': ['A', 'a', 'B', 'b', 'b', 'C'], 'NUMBER': ['1', None, '2', None, None,'3'] }) # 若数据中空值为空字符串而非NaN,先执行替换:df = df.replace("", pd.NA) # 向前填充CODE列,为拆分的多行绑定所属主键 df["group_key"] = df["CODE"].ffill() # 分组聚合完成合并 result = df.groupby("group_key", as_index=False).agg( # 拼接同组下所有TEXT内容,不需要分隔符就用空字符串,需要换行/逗号就替换为'\n'/',' TEXT=("TEXT", lambda col: "".join(col.astype(str))), # 取同组下第一个非空的NUMBER值 NUMBER=("NUMBER", lambda col: col.dropna().iloc[0]) ).rename(columns={"group_key": "CODE"})
执行后result的输出和预期结构完全一致。
适配调整说明
- 如果拆分的标识列不是
CODE,把代码里的CODE替换为你实际的主键列名即可 - 如果TEXT拼接需要特定分隔符,修改
join方法的入参即可,比如逗号分隔就写",".join(col.astype(str)) - 如果存在多列需要拼接的字符串字段,在
agg方法里按TEXT的写法新增对应聚合规则即可
内容的提问来源于stack exchange,提问作者PanAmigo
相关产品推荐
相关产品推荐

