繁体   English   中英

Pandas 基于使用 dataframe 的一列作为索引的两个列表,将值分配给 dataframe 列

[英]Pandas assign value to dataframe column based on two lists using one column of the dataframe as index

我有以下列表: brands_list = {"b1": {"name": "brand1"}, "b2". {"name": "brand2"}} brands_list = {"b1": {"name": "brand1"}, "b2". {"name": "brand2"}}actual_brands = ["brand1"]和一个 Pandas dataframe 列brand包含以下内容: "b1", "b1", "b1", "b2", "b1" ,如果brands_list的元素与列brand的索引在actual_brands中,我想为列is_brand_present分配一个值。

我使用 numpy 的where尝试以下操作:

brands_list = {"b1": "brand1", "b2". "brand2"}
actual_brands = ["brand1"]

data_frame["is_brand_present"] = np.where(
    brands_list[data_frame["brand"]].isin(actual_brands), 1, 0
)

我希望列is_brand_present的内容为1,1,1,0,1 ,但我收到此错误:

TypeError: unhashable type: 'Series'

我怎样才能对条件进行评估?

IIUC,您正在寻找(将“品牌”列映射到字典并检查其是否在实际品牌中)

df['is_brand_present'] = df['brand'].map(brands_list).isin(actual_brands).astype(int)

如果您的brands_list 根据您对问题的更新嵌套,您可以使用:

df['brand'].map({k: v['name']
                 for k, v in brands_list.items()
                 }).isin(actual_brands).astype(int)

打印(df):

  brand  is_brand_present
0    b1                 1
1    b1                 1
2    b1                 1
3    b2                 0
4    b1                 1

我们只能做

l = [x for x, y in brands_list.items() if y['name'] in actual_brands ]


df['is_brand_present'] = df.brand.isin(l).astype(int)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM