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

Python Pandas新手求助:按SKU前缀批量调整bottlePrice列值

基于SKU前缀计算新价格列的解决方案

问题分析

你之前的代码存在两个核心问题:

  • 直接对筛选后的行使用apply,会导致未匹配条件的行新列值为缺失值(NaN)
  • 未指定axis=1时,apply默认对列操作,lambda中的x是整列数据而非目标列;若指定axis=1,x代表整行,直接乘系数会修改所有列,而非仅bottlePrice

正确实现方法

方法一:使用loc定位赋值(推荐,高效直观)

分步操作逻辑清晰,新手易理解调试:

# 先将原bottlePrice值复制到新列作为基础
x["new_bottle_price"] = x["bottlePrice"].copy()

# 对SKU以BA开头的行,新价格乘以1.3
x.loc[x["SKU"].str.startswith("BA"), "new_bottle_price"] *= 1.3

# 对SKU以BF开头的行,新价格乘以1.1
x.loc[x["SKU"].str.startswith("BF"), "new_bottle_price"] *= 1.1

方法二:使用apply结合自定义函数

适合后续需要扩展更多前缀规则的场景:

def get_new_price(row):
    if row["SKU"].startswith("BA"):
        return row["bottlePrice"] * 1.3
    elif row["SKU"].startswith("BF"):
        return row["bottlePrice"] * 1.1
    # 其他前缀返回原价格,可根据需求修改
    else:
        return row["bottlePrice"]

# 按行应用函数生成新列
x["new_bottle_price"] = x.apply(get_new_price, axis=1)

也可以写成简洁的lambda形式:

x["new_bottle_price"] = x.apply(
    lambda row: row["bottlePrice"] * 1.3 if row["SKU"].startswith("BA") 
    else row["bottlePrice"] * 1.1 if row["SKU"].startswith("BF") 
    else row["bottlePrice"],
    axis=1
)

注意事项

  • 确保SKU列是字符串类型,若不是可先转换:x["SKU"] = x["SKU"].astype(str)
  • 若存在空值,可添加na=False参数忽略:x["SKU"].str.startswith("BA", na=False)

内容的提问来源于stack exchange,提问作者Umut KAAN BIÇAK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:52:24