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

如何基于含SKU列表的DataFrame为另一DataFrame赋值?

解决DataFrame分组SKU的Price匹配赋值问题

你遇到的ValueError: Incompatible indexer with Series,核心原因是从DF2筛选出的Price是Series对象(哪怕只有一条结果),而DF1的单个单元格需要标量值(单个数字/空值),直接赋值会导致索引类型不兼容。另外你循环用range(6),但DF1只有2行,这也会引发后续索引越界错误。


方案1:修复循环逻辑(适合小规模数据)

遍历DF1的真实索引,将筛选出的Series转为标量值,同时处理无匹配的情况:

import pandas as pd

# 假设DF1、DF2已初始化
for idx in DF1.index:
    sku = DF1.loc[idx, 'SKU']
    # 筛选匹配的Price系列
    match_price = DF2[DF2['Included SKUs'].str.contains(str(sku))]['Price']
    # 取第一个匹配值,无匹配则设为缺失值
    DF1.loc[idx, 'Price'] = match_price.iloc[0] if not match_price.empty else pd.NA
    print(DF1.loc[idx])

注意:str.contains可能存在误匹配(比如SKU为"AA"会被包含"A"的组匹配),如果需要精确匹配,优先用下面的方案2。


方案2:向量化拆分匹配(推荐,高效且准确)

先把DF2的分组SKU拆分为单独行,再通过merge完成匹配,这是pandas的最优实践,既避免循环,又能确保匹配精确:

import pandas as pd

# 1. 拆分DF2的Included SKUs为多行,同时清理SKU的空格
df2_expanded = DF2.assign(SKU=DF2['Included SKUs'].str.split(', ')).explode('SKU')

# 2. 和DF1做左连接,匹配对应Price
DF1 = DF1.merge(df2_expanded[['SKU', 'Price']], on='SKU', how='left')

# 查看最终结果
print(DF1)

执行后DF1会直接得到匹配后的Price,数据量大时速度远快于循环,还能避免str.contains的误匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 03:01:02