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

基于字典条件为DataFrame创建referral_fee列的技术求助

问题:基于混合类型字典生成DataFrame的referral_fee列

需要为包含ASIN、category、price列的DataFrame新增referral_fee列,规则由以下字典定义——部分类别是固定比例,部分是依赖价格的lambda函数:

referral_fees = {
        "Amazon Device Accessories": 0.45,
        "Appliances - Compact": lambda price: 0.15 if 0 < price <= 300 else 0.08,
        "Appliances - Full-size": 0.08,
        "Automotive and Powersports": 0.12,
        "Base Equipment Power Tools": 0.12,
        "Baby Products": lambda price: 0.08 if 0 < price <= 10 else 0.15}

原始数据:

ASINcategoryprice
1Appliances - Compact250
2Appliances - Compact400
3Automotive and Powersports500
4Baby Products9
5Baby Products12
6Appliances - Full-size275

预期生成含referral_fee列的结果:

ASINcategorypricereferral_fee
1Appliances - Compact2500.15
2Appliances - Compact4000.08
3Automotive and Powersports5000.12
4Baby Products90.08
5Baby Products120.15
6Appliances - Full-size2750.08

之前尝试的问题

  • 直接使用df["referral_fee"] = df["category"].map(referral_fees):结果列出现函数对象(如<function <lambda> at 0x000001EAFE8CE040>),而非计算后的数值。
  • 自定义函数触发unhashable type: 'Series'错误:原因是尝试用Series作为字典键,无法匹配。

解决方案

方法1:逐行处理(最直观)

定义函数判断规则类型,用apply遍历每行计算:

def calculate_referral_fee(row):
    rule = referral_fees[row['category']]
    return rule(row['price']) if callable(rule) else rule

df['referral_fee'] = df.apply(calculate_referral_fee, axis=1)

方法2:分离固定/动态规则(性能更优)

先填充固定比例,再单独处理需要计算的类别:

# 拆分固定比例和动态计算规则
fixed_rules = {k: v for k, v in referral_fees.items() if not callable(v)}
dynamic_rules = {k: v for k, v in referral_fees.items() if callable(v)}

# 填充固定比例
df['referral_fee'] = df['category'].map(fixed_rules)

# 处理动态计算的类别
for cat, func in dynamic_rules.items():
    mask = df['category'] == cat
    df.loc[mask, 'referral_fee'] = df.loc[mask, 'price'].apply(func)

方法3:一行式简化写法

如果偏好简洁代码,直接在apply中嵌入逻辑:

df['referral_fee'] = df.apply(
    lambda r: referral_fees[r['category']](r['price']) 
    if callable(referral_fees[r['category']]) 
    else referral_fees[r['category']],
    axis=1
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:25:00