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

如何基于字典与列表为Pandas DataFrame列赋值?解决TypeError报错

问题解决思路与代码实现

首先修正你字典的语法错误:把"b2". "brand2"改成"b2": "brand2",否则字典无法正常创建。

你触发TypeError: unhashable type: 'Series'的原因是直接将Pandas的Series对象作为字典键查询——Series是不可哈希的类型,自然会报错。以下是两种能得到目标结果[1,1,1,0,1]的可行方法:

方法一:映射后直接判断(直观易读)

先把DataFrame的brand列值通过字典映射为品牌全称,再判断该全称是否在actual_brands列表中,最后转换为1/0格式:

import pandas as pd
import numpy as np

# 修正后的字典
brands_list = {"b1": "brand1", "b2": "brand2"}
actual_brands = ["brand1"]
# 创建示例DataFrame
df = pd.DataFrame({"brand": ["b1","b1","b1","b2","b1"]})

# 方式1:用map+isin+astype直接生成结果
df["is_brand_present"] = df["brand"].map(brands_list).isin(actual_brands).astype(int)

# 方式2:用numpy.where实现相同逻辑
df["is_brand_present"] = np.where(df["brand"].map(brands_list).isin(actual_brands), 1, 0)

方法二:预构建匹配集合(大数据量更高效)

如果数据量较大,建议先通过反向映射构建需要匹配的键集合,再直接判断列值是否在集合中,提升查询效率:

import pandas as pd

brands_list = {"b1": "brand1", "b2": "brand2"}
actual_brands = ["brand1"]
df = pd.DataFrame({"brand": ["b1","b1","b1","b2","b1"]})

# 先筛选出对应actual_brands的键集合
target_keys = {key for key, val in brands_list.items() if val in actual_brands}

# 直接判断列值是否在目标键集合中
df["is_brand_present"] = df["brand"].isin(target_keys).astype(int)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:27:15