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

Python Pandas DataFrame SKU匹配:生成一对一关联对比表

如何将两个Pandas DataFrame按SKU一对一匹配并生成关联对比表

问题说明

你需要将包含商品信息的DataFrame与SKU列表DataFrame进行一对一匹配,最终生成包含商品名称、价格及对应匹配SKU的关联DataFrame,此前使用.isin()方法未得到预期结果。

示例数据

import pandas as pd

materials = {"Item No.": ['SHIRT, NIKE-345','PANTS, NIKE-345','SHOES, ADIDAS-67',
                                'SHORTS, ADIDAS-67'],
             "Price": ['34.99','45.99','79.99','39.99']}

df = pd.DataFrame(materials)

matching = {"Item SKU": ['NIKE-345','NIKE-345','ADIDAS-67','ADIDAS-67']}

df2 = pd.DataFrame(matching)

解决方案

场景1:两个DataFrame行顺序完全对应

如果df和df2的行是严格一对一对应的(如示例中所示),直接将df2的SKU列添加到df中即可,这是最简便的方法:

# 添加匹配SKU列
df["Item Matching SKU"] = df2["Item SKU"]

# 查看结果
print(df)

执行后将得到你期望的输出:

Item No.  Price Item Matching SKU
0   SHIRT, NIKE-345  34.99          NIKE-345
1    PANTS, NIKE-345  45.99          NIKE-345
2  SHOES, ADIDAS-67  79.99         ADIDAS-67
3 SHORTS, ADIDAS-67  39.99         ADIDAS-67

场景2:行顺序不固定(通用匹配方案)

如果两个DataFrame的行顺序不一致,需要从商品名称中提取SKU后再进行关联匹配:

# 从Item No.中提取SKU(假设SKU位于逗号后的部分)
df["Extracted SKU"] = df["Item No."].str.split(", ").str[-1]

# 通过SKU进行左连接,确保所有商品都能匹配到对应SKU
result = df.merge(df2, left_on="Extracted SKU", right_on="Item SKU", how="left")

# 整理列名并移除临时提取的SKU列
result = result.rename(columns={"Item SKU": "Item Matching SKU"}).drop("Extracted SKU", axis=1)

print(result)

为什么.isin()无法满足需求

.isin()方法仅用于判断元素是否存在于另一个序列中,返回的是布尔值数组,无法直接实现一对一的SKU关联映射,因此不适合当前场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 13:09:58