如何创建非列表型also_view_brand列,实现also_view与brand的映射?
解决方案
我们可以用Pandas快速实现这个需求,具体步骤如下:
1. 构建ASIN到品牌的映射字典
先从数据中提取asin和brand的对应关系,生成一个字典用于快速查询:
import pandas as pd # 构造你的示例数据 data = { 'asin': ['B0001', 'B0004', 'B0002', 'B0003'], 'brand': ['Apple', 'Samsung', 'OnePlus', 'Motorola'], 'also_view': [[], ['B0001', 'B0002', 'B0003'], ['B0001', 'B0004'], ['B0002', 'B0004']] } df = pd.DataFrame(data) # 创建ASIN到品牌的映射字典 asin_brand_map = df.set_index('asin')['brand'].to_dict()
2. 编写处理函数生成品牌字符串
定义一个函数,遍历also_view中的ASIN,替换为对应的品牌,再拼接成非列表形式的字符串(这里用逗号分隔,你可以根据需求调整分隔符):
def map_asin_to_brand(asin_list): # 过滤掉映射字典中不存在的ASIN(比如示例里的B00002) matched_brands = [asin_brand_map[asin] for asin in asin_list if asin in asin_brand_map] return ', '.join(matched_brands)
3. 生成新列
用apply方法将函数作用到also_view列,生成目标列also_view_brand:
df['also_view_brand'] = df['also_view'].apply(map_asin_to_brand)
最终结果
处理后的数据表如下:
| asin | brand | also_view | also_view_brand |
|---|---|---|---|
| B0001 | Apple | [] | |
| B0004 | Samsung | [B0001, B0002, B0003] | Apple, OnePlus, Motorola |
| B0002 | OnePlus | [B0001, B0004] | Apple, Samsung |
| B0003 | Motorola | [B0002, B0004] | OnePlus, Samsung |
内容的提问来源于stack exchange,提问作者Purnima Rawat
相关产品推荐
相关产品推荐

