Pandas操作:列值包含字典值任意项时将对应键作为标签新增列
实现方案
你没有把问题想复杂,核心逻辑只需要两步:先把每行的产品字符串拆成集合,再和映射字典每个分类下的产品列表做交集判断,有交集就保留对应分类标签即可。
以下是可直接运行的代码实现:
import pandas as pd # 原始数据 df = pd.DataFrame({'products' : ['a,b,c', 'a,c', 'b,d','a,b,c']}) mydict = {'good':['a'],'bad':['d'],'neutral':['b','c','a']} # 预转集合提升判断效率(可选,数据量小时可以省略) category_map = {k: set(v) for k, v in mydict.items()} def get_labels(product_str): product_set = set(product_str.split(',')) res = [] for cate, p_list in category_map.items(): # 存在交集就添加对应分类标签 if product_set & p_list: res.append(cate) return ','.join(res) df['quality'] = df['products'].apply(get_labels)
如果追求更简洁的写法,也可以把逻辑压缩成一行,可读性稍差但功能一致:
df['quality'] = df['products'].apply(lambda x: ','.join([k for k,v in mydict.items() if set(x.split(',')) & set(v)]))
两种写法运行后得到的结果都和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者AVal
相关产品推荐
相关产品推荐

