You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何将同订单号多行合并为单行并新增对应字段列

Pandas 同订单多行记录转单行实现方案

问题说明

  • 基于pandas处理订单数据,单个订单最多包含2行记录,每行对应订单的一个组成部分
  • 需求:将同一订单对应的2行记录合并为单行,第一条记录的字段保留原列名,第二条记录的字段存入新增的带2后缀的同名列

示例输入

输入表包含Order_Number、INVENTORY CODE、description1三个字段,以订单号4304为例,对应2行记录:

Order_NumberINVENTORY CODEdescription1
4304STDROFENHBSM608.511WH8-1/2 x 11, 60# Soporset Digital HiBright Smooth
4304STNDEN695WOL6 x 9.5 DBL WDW ENVELOPE

期望输出

同一订单仅保留1行,保留第一条记录的全部字段,新增INVENTORY CODE2、description2存储第二条记录的对应值:

Order_NumberINVENTORY CODEdescription1INVENTORY CODE2description2
4304STDROFENHBSM608.511WH8-1/2 x 11, 60# Soporset Digital HiBright SmoothSTNDEN695WOL6 x 9.5 DBL WDW ENVELOPE

现有代码

目前已完成多源数据合并,但合并结果存在同一Order_Number对应重复行的问题,现有代码如下:

# 定义输入文件路径
infile= ('file1.csv')
infile2= ('file2.csv')
infile3= ('file3.csv')
# 截取文件名生成输出路径
size = len(infile)
size2 = len(infile2)
outfile = (infile[:size -4]+"_"+infile2[:size2 -4]+"_output.csv")


# 读取csv数据为DataFrame
df = pd.read_csv(infile, encoding = "ISO-8859-1", engine= 'python')
df2 = pd.read_csv(infile2, encoding = "ISO-8859-1", engine= 'python')
df3 = pd.read_csv(infile3, encoding = "ISO-8859-1", engine= 'python')

# 多表关联
df_merge =df.merge(df2, on='Order_Number', how='left')
df_final = pd.merge(df_merge,df3[['PkgID?','Printer', 'Inserter']],on='PkgID?', how='left')

实现代码

在现有合并逻辑之后追加以下代码即可完成行合并:

# 为每个订单内的条目按顺序编号,第一条记为1,第二条记为2
df_final['row_seq'] = df_final.groupby('Order_Number').cumcount() + 1

# 配置字段:同一订单下值完全一致、不需要拆分的字段放入fixed_cols
fixed_cols = ['Order_Number', 'PkgID?', 'Printer', 'Inserter']
# 配置字段:同一订单下不同行值不同、需要拆成多列的字段放入pivot_cols
pivot_cols = ['INVENTORY CODE', 'description1']

# 行转列完成合并
df_result = df_final.pivot(
    index=fixed_cols,
    columns='row_seq',
    values=pivot_cols
)

# 重命名列,第二条记录的字段自动加2后缀
df_result.columns = [
    col_name if seq == 1 else f"{col_name}{seq}"
    for col_name, seq in df_result.columns
]
df_result = df_result.reset_index()

# 导出结果
df_result.to_csv(outfile, index=False, encoding='ISO-8859-1')

说明:

  • 仅包含1条记录的订单,对应的INVENTORY CODE2、description2字段会自动填充为空值
  • 如果存在单订单超过2条记录的异常数据,代码会自动生成带3、4后缀的对应列,可提前加过滤逻辑剔除异常数据
  • 若有其他同订单值固定的字段,直接加入fixed_cols列表即可,不需要修改其他逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:18:35