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

如何调用字典值为DataFrame创建匹配金属成本规则的布尔列

实现方法

报错原因

你遇到的两个报错对应两个常见的误用场景:

  • ValueError: Lengths must match to compare:是因为你直接将16个元素的成本上限列表和全表9999行的Total Cost列做逐行比较,两个序列长度不一致,无法对应运算
  • TypeError: 'Series' objects are mutable, thus they cannot be hashed:是因为你在使用apply或者查询方法时,错误地将整列Series对象作为键传入字典查询,字典要求键为不可变类型,Series是可变对象无法作为哈希键使用

正确实现(性能最优方案)

首先将你给出的Cost_ranges转换为「金属-成本上限」的映射字典,再用map方法将每行的Metal值映射为对应成本上限,最后做逐行比较即可,不需要用循环或者apply,性能远高于逐行处理方法。

import pandas as pd

# 1. 转换为金属到成本上限的映射字典
metal_limit_map = dict(zip(Cost_ranges['Metals'], Cost_ranges['Cost Maximum']))

# 2. 新增布尔列,按规则判定
df_Cost['is_over_cost_limit'] = df_Cost['Total Cost'] >= df_Cost['Metal'].map(metal_limit_map)

可选:异常值兼容

如果你的表中存在不在给出金属列表中的异常值,可以补充填充默认值避免生成空值:

# 不在列表中的金属默认成本上限设为无穷大,判定结果为False,可根据需求调整
df_Cost['is_over_cost_limit'] = df_Cost['Total Cost'] >= df_Cost['Metal'].map(metal_limit_map).fillna(float('inf'))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 08:39:02