• 在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 "其他"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    但是如果有新的品牌增加的时候就很难增加,于是我更换函数,先写一个品牌映射的字段,然后在函数中遍历字典,来匹配函数,如下:

    def brand_describe(x):
        brand_mapping = {'TRUM': '通快', 'BYSTRONIC': '百超', 'AMADA': 'AMADA', 'GWEIKE': '金威刻'}
         # 遍历字典,查找匹配的品牌
        for brand, description in brand_mapping.items():
            if brand in x.upper():
                return description
        return "其他"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    最后,使用apply()函数进行映射:

    df['品牌'] = df['产品描述'].apply(brand_describe)
    
    • 1

    后来,我又想到一种品牌映射的方法,使用字典的items()方法可以直接取出key和value,通过产品描述中是否包含关键字来映射品牌

    # 创建一个品牌映射字典
    brand_mapping =  {'TRUM': '通快', 'BYSTRONIC': '百超', 'AMADA': 'AMADA', 'GWEIKE': '金威刻'}
    # 遍历字典并更新数据框
    for keyword, brand in brand_mapping.items():
        df.loc[df['产品描述'].str.contains(keyword), '品牌'] = brand
    
    • 1
    • 2
    • 3
    • 4
    • 5

    温馨提示:
    上面代码中如果找不到包含的关键字,会显示为空,如果需要显示特定的字符如“其他”,需要在遍历前,将品牌这一列初始化为“其他”

    df['品牌'] = '其他'
    
    • 1
  • 相关阅读:
    CMake继续学习
    Elasticsearch:使用 Point 和 Shape 字段类型
    算法训练 第二周
    Go内存分配
    Android系统设置默认24小时制
    redis我记不住的那些命令(五)
    Web基础与HTTP协议
    springboot声明式事务没有生效——警惕springboot声明式事务的坑
    c++:数据结构链表list的模拟实现
    [ABC286D] Money in Hand(背包--必须刚好装满--物品数量有限--题型)
  • 原文地址:https://blog.csdn.net/weixin_47744974/article/details/133611009