【问题标题】:How to assign a set value to a column if a condition is met?如果满足条件,如何为列分配设定值?
【发布时间】:2021-09-28 13:59:51
【问题描述】:

我有一组产品需要分配谷歌分类代码。总共有大约 213000 种产品我需要添加这些代码。我已经在 pandas 中输入了一个 7000 的小样本,看看我是否可以写一些东西来运行关键字并在找到关键字时为列分配代码。

总的来说,我仍然对 Python 和 Pandas 有所了解。

我想如果我写一个 if 语句,声明如果它遇到一个关键字,则将分类代码写入 googlecode 列,其中包含有效的关键字的每一行。但我不知道如何写这个东西。我已经尝试了一些变化并不断碰壁。任何从哪里开始的建议都会很棒,甚至是关于如何做这样的事情的教程建议。

我目前的代码如下:

import pandas as pd
import numpy as np
product_data = pd.read_csv(
    r'C:\Users\mathewo\Documents\Python\Google sheet match.csv',
    dtype={
        'productcode': 'string',
        'category': 'string'
        }
    )
        
product_data.dropna(inplace = True)
        
product_data["googlecode"] = ""
        
        
brake_code = [2977]
mirror_code = [2642]
generic_code = [5613]
lights_code = [3318]
suspension_code = [2935]
tyres_code = [911]
        
        
if product_data['category'].str.contains('BRAKE').any():
    product_data['googlecode'].string.contains('BRAKE').any = brake_code

当前书籍:

【问题讨论】:

    标签: python pandas bigdata


    【解决方案1】:

    试试:

    conditions=['BRAKE','MIRROR','GENRIC','LIGHTS','SUSPENSION','TYRES']
    labels=[2977,2642,5613,3318,2935,911]
    

    最后使用str.extract()map()

    pat='('+'|'.join(conditions)+')'
    product_data['googlecode']=product_data['category'].str.extract(pat,expand=False)
    product_data['googlecode']=product_data['googlecode'].map(dict(zip(conditions,labels)))
    

    【讨论】:

    • @Erfan 你是对的先生.....谢谢先生的建议:)
    • @Anurag Dabas 您需要用括号 (A|B|C) 包围您的 A|B|C 正则表达式,否则将不会有任何捕获组。此外,您可以直接创建字典并在您的联接中使用它,因为将使用键。这是一个简化版本:codes = {'BRAKE': 2977, 'MIRROR': 2642, 'GENRIC': 5613, 'LIGHTS': 3318, 'SUSPENSION': 2935, 'TYRES': 911} ; product_data['googlecode']=product_data['category'].str.extract('(%s)' %'|'.join(codes),expand=False).map(codes)
    • @mozway 你是对的先生.....谢谢先生的建议..对答案进行了更改:)
    【解决方案2】:

    想象一下这个输入数据框:

    df = pd.DataFrame({'productcode': ['AA7690', 'AB0105', 'XYZ123', 'ZZ5103'],
                       'category': ['TRUCK & TAILER, AIR SYSTEM, ', 'TRUCK & TAILER, AIR SYSTEM, ', 'BLAHBLAH BRAKE BLAH', 'ACCESSORIES, BRANDED MERCHANDISE']
                       })
    
      productcode                          category
    0      AA7690      TRUCK & TAILER, AIR SYSTEM, 
    1      AB0105      TRUCK & TAILER, AIR SYSTEM, 
    2      XYZ123               BLAHBLAH BRAKE BLAH
    3      ZZ5103  ACCESSORIES, BRANDED MERCHANDISE
    

    您可以使用此自定义功能来搜索产品代码并将它们附加为新列

    import re
    codes = {'BRAKE': 2977, 'TRUCK': 1234, 'MIRROR': 2642}
    regex_code = re.compile('|'.join(codes))
    def search(s):
        m = regex_code.search(s)
        if m and m.group() in codes:
            return codes[m.group()]
        return 0
    df['googlecode'] = df.category.apply(search)
    

    输出:

      productcode                          category  googlecode
    0      AA7690      TRUCK & TAILER, AIR SYSTEM,         1234
    1      AB0105      TRUCK & TAILER, AIR SYSTEM,         1234
    2      XYZ123               BLAHBLAH BRAKE BLAH        2977
    3      ZZ5103  ACCESSORIES, BRANDED MERCHANDISE           0
    

    如果您更喜欢在没有匹配项时使用 NaN 而不是 0,请删除函数中的 return 0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多