如何基于字典与列表为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
相关产品推荐
相关产品推荐

