在pandas中通过一列数据映射出另一列的几种思路和方法
如果一句话中出现某个品牌的关键词,那么就将该品牌进行提取,开始我的做法是写了很多elif,如下:
def brand_describe(x):if 'TRUM' in x.upper():return "通快"elif 'BYSTRONIC' in x.upper():return "百超"elif 'AMADA' in x.upper():return "AMADA"elif 'GWEIKE' in x.upper():return "金威刻"else:return "其他"
但是如果有新的品牌增加的时候就很难增加,于是我更换函数,先写一个品牌映射的字段,然后在函数中遍历字典,来匹配函数,如下:
def brand_describe(x):brand_mapping = {'TRUM': '通快', 'BYSTRONIC': '百超', 'AMADA': 'AMADA', 'GWEIKE': '金威刻'}# 遍历字典,查找匹配的品牌for brand, description in brand_mapping.items():if brand in x.upper():return descriptionreturn "其他"
最后,使用apply()函数进行映射:
df['品牌'] = df['产品描述'].apply(brand_describe)
后来,我又想到一种品牌映射的方法,使用字典的items()方法可以直接取出key和value,通过产品描述中是否包含关键字来映射品牌
# 创建一个品牌映射字典
brand_mapping = {'TRUM': '通快', 'BYSTRONIC': '百超', 'AMADA': 'AMADA', 'GWEIKE': '金威刻'}
# 遍历字典并更新数据框
for keyword, brand in brand_mapping.items():df.loc[df['产品描述'].str.contains(keyword), '品牌'] = brand
温馨提示:
上面代码中如果找不到包含的关键字,会显示为空,如果需要显示特定的字符如“其他”,需要在遍历前,将品牌这一列初始化为“其他”
df['品牌'] = '其他'