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

如何对比两个Pandas DataFrame并向sap_warehouse插入缺失的物料数据

如何对比两个Pandas DataFrame并向sap_warehouse插入缺失的物料数据

嘿,这个需求其实用Pandas的几个基础方法就能轻松实现,我结合你的示例数据,给你两种直观的解决方案,你可以根据自己的习惯选择:

首先先把你的示例数据用代码还原出来,方便我们直接测试验证:

import pandas as pd

# 构建你的 sap_scrapped 示例数据
sap_scrapped = pd.DataFrame({
    'Material': ['08-008099-00', '10-000001-00'],
    'Scrapped': [2, 5]
})

# 构建你的 sap_warehouse 示例数据
sap_warehouse = pd.DataFrame({
    'Material': ['10-000001-00', '10-789001-00'],
    'SSP': [0, 10],
    'Scrapped': [0, 7]
})

方法一:筛选缺失行后追加(最直接)

这个思路就是先定位sap_scrapped里有但sap_warehouse没有的物料行,处理格式后直接追加到目标DataFrame,步骤清晰易懂:

  1. 筛选缺失的物料行
    用isin()方法判断哪些物料不在sap_warehouse中,取反得到缺失的行:
# 找出 sap_scrapped 中未出现在 sap_warehouse 的物料行
missing_rows = sap_scrapped[~sap_scrapped['Material'].isin(sap_warehouse['Material'])]
  1. 补全缺失行的SSP列
    给这些缺失行添加SSP列,按照需求设为0:
missing_rows['SSP'] = 0
  1. 对齐列顺序
    确保缺失行的列顺序和sap_warehouse完全一致,避免追加时出现列错位问题:
# 调整列顺序为 Material → SSP → Scrapped,和目标DataFrame保持一致
missing_rows = missing_rows[['Material', 'SSP', 'Scrapped']]
  1. 追加到sap_warehouse
    用pd.concat()把缺失行追加进去,记得加上ignore_index=True重置索引:
sap_warehouse_updated = pd.concat([sap_warehouse, missing_rows], ignore_index=True)

运行后打印结果,完全符合你的预期:

Material  SSP  Scrapped
0  10-000001-00    0         0
1  10-789001-00   10         7
2  08-008099-00    0         2

方法二:外连接合并后填充(适合复杂场景)

如果以后你需要同时处理「缺失物料插入」和「现有数据更新」的需求,用外连接的方法会更灵活:

# 以Material为关联键,执行外连接合并两个DataFrame
merged_df = pd.merge(
    sap_warehouse, 
    sap_scrapped, 
    on='Material', 
    how='outer', 
    suffixes=('_warehouse', '_scrapped')
)

# 填充缺失值:SSP缺省设为0,Scrapped缺省用sap_scrapped里的对应值
merged_df['SSP'] = merged_df['SSP'].fillna(0)
merged_df['Scrapped_warehouse'] = merged_df['Scrapped_warehouse'].fillna(merged_df['Scrapped_scrapped'])

# 整理成目标格式的DataFrame
sap_warehouse_updated = merged_df[['Material', 'SSP', 'Scrapped_warehouse']].rename(
    columns={'Scrapped_warehouse': 'Scrapped'}
).reset_index(drop=True)

这个方法最终得到的结果和方法一完全相同,但扩展性更强——比如如果后续需要更新现有物料的Scrapped值,只需要调整填充逻辑即可。

两种方法都能满足你的需求,选哪个看你当前场景的复杂度就好~

备注:内容来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 19:44:34