[英]Make Pandas Dataframe column equal to value in another Dataframe based on index
[英]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.