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
相关产品推荐
相关产品推荐

