You need to enable JavaScript to run this app. Pandas DataFrame 按发票归组转置明细实现单发票多列宽表
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame 按发票归组转置明细实现单发票多列宽表

Pandas 非规整发票表转宽表落地实现

原始数据结构特征

表格包含两类无显式分组标记的行:

  • 发票头主行:Document type、Invoicenumber、Invoicedate字段非空,承载单张发票的核心主信息
  • 明细行项目:紧邻对应发票头行下方,Document type字段值为0,归属上方相邻的发票,是发票下的独立交易明细
    输出目标为整合同属一张发票的所有明细到同一行:对description、quantity、unit price、line amount类明细字段,按明细出现顺序添加#数字后缀生成独立列(如description#1、quantity#2),最终得到每张发票对应一行的规整宽表。

已尝试的无效操作

  • 直接基于原始行索引对明细行做转置,无法正确匹配明细与所属发票的映射关系,出现列值错配
  • 通过pd.DataFrame.from_dict构造测试样例、传入字典参数用pd.DataFrame(data=d1)初始化表结构,均未生成符合预期的列映射规则

可落地实现步骤

  • 绑定行级发票归属
    对Invoicenumber、Invoicedate、Document type三个主信息字段执行向前填充,将发票头的主信息值向下覆盖到同组的所有明细行,用填充完成的Invoicenumber作为后续分组的唯一标识,无需手动识别分组边界
  • 生成明细顺序序号
    按分组标识拆分数据后,仅对Document type == 0的明细行做组内累计计数,从1开始生成连续整数序号,作为后续列名的拼接后缀
  • 重命名明细字段避免列冲突
    对目标明细字段,将原字段名与生成的序号拼接为带#后缀的新列名,保证不同明细行的同名字段在转宽表后不会出现覆盖
  • 聚合生成宽表
    按发票分组标识聚合时,主信息字段直接取组内首个非空值,明细字段按照重命名后的列名做值展开,最终输出每行对应单张发票的规整结构

内容的提问来源于stack exchange,提问作者Max

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 09:06:11