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

合并3个DataFrame:基于零件编号为物料编号分配成本

合并多DataFrame实现双成本分配方案

核心思路

通过**左连接(left join)**将主表A_df与两个成本表B1_df、B2_df依次合并,同时为两种成本分配方式的列重命名,确保结果表保留A_df所有物料编号,并对应两种成本数据。

步骤与代码示例

假设使用Python的pandas库处理(这是DataFrame操作的标准工具):

1. 导入依赖与定义示例数据

import pandas as pd

# 主表:包含所有物料编号及其他信息
A_df = pd.DataFrame({
    "物料编号": ["M001", "M002", "M003", "M004"],
    "物料名称": ["零件A", "零件B", "零件C", "零件D"]
})

# 成本表1:方式1的成本数据
B1_df = pd.DataFrame({
    "物料编号": ["M001", "M002", "M003"],
    "成本": [150, 220, 300]
})

# 成本表2:方式2的成本数据
B2_df = pd.DataFrame({
    "物料编号": ["M001", "M003", "M004"],
    "成本": [180, 320, 250]
})

2. 重命名成本列(区分两种分配方式)

为避免合并后列名冲突,先给两个成本表的成本列添加专属后缀:

B1_renamed = B1_df.rename(columns={"成本": "成本_方式1"})
B2_renamed = B2_df.rename(columns={"成本": "成本_方式2"})

3. 依次合并DataFrame

使用merge方法执行左连接,确保A_df的所有物料编号都被保留:

# 第一步:合并主表与方式1的成本数据
result_df = pd.merge(A_df, B1_renamed, on="物料编号", how="left")
# 第二步:合并方式2的成本数据
result_df = pd.merge(result_df, B2_renamed, on="物料编号", how="left")

# 可选:将缺失的成本值填充为0(根据业务需求,也可保留NaN)
result_df = result_df.fillna(0)

4. 最终结果

执行上述代码后,result_df的输出为:

物料编号 物料名称  成本_方式1  成本_方式2
0  M001   零件A    150.0    180.0
1  M002   零件B    220.0      0.0
2  M003   零件C    300.0    320.0
3  M004   零件D      0.0    250.0

进阶处理

  • 如果B1_df/B2_df存在重复的物料编号,需先做聚合处理(如求和、取平均):
    # 按物料编号求和成本
    B1_agg = B1_df.groupby("物料编号")["成本"].sum().reset_index().rename(columns={"成本": "成本_方式1"})
    
  • 若不想提前重命名列,可直接在merge时使用suffixes参数:
    result_df = pd.merge(A_df, B1_df, on="物料编号", how="left", suffixes=("", "_方式1"))
    result_df = pd.merge(result_df, B2_df, on="物料编号", how="left", suffixes=("", "_方式2"))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 05:18:17