Python Pandas按PO Header ID分组并拼接对应XML字符串的实现方法
问题解决说明
报错根因
- 列名大小写不匹配:你原始数据的分组列名为
PO Header ID(末尾ID为全大写),但代码中写的是PO Header Id(末尾d为小写),是触发KeyError的直接原因,可先执行print(df.columns)确认实际列名的完整写法。 - 聚合逻辑错误:你需要合并的是同分组下的
XML字段内容,无需将XML放入分组键,也不需要提前调用不存在有效值的Combined_XML列参与聚合。
正确实现代码
通用写法(适配所有Pandas版本)
# 按PO Header ID分组,拼接同组所有XML字符串,重命名为目标列名 combineXML = df.groupby('PO Header ID', as_index=False)['XML'].agg( lambda x: ''.join([i.strip() for i in x]) # strip可去除原始XML前后的多余空格,不需要可以删掉 ).rename(columns={'XML': 'Combined_XML'})
简化写法(适配Pandas 1.3及以上版本)
combineXML = df.groupby('PO Header ID', as_index=False)['XML'].agg(''.join).rename(columns={'XML': 'Combined_XML'})
执行后combineXML就是你需要的输出结果。
原代码逻辑问题说明
- 将
XML放入groupby的分组键中,会导致每个唯一的「PO Header ID+XML」组合单独成为分组,无法实现同PO下多行XML合并的效果 - 调用不存在有效值的
Combined_XML列参与聚合,原始数据中该列是最终要生成的结果列,初始无有效内容可以用来拼接。
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

