如果满足条件,如何将设置值分配给列?

时间:2021-07-21 07:12:01

标签: python pandas bigdata

我有一组产品需要为其分配 google 分类代码。我需要将这些代码添加到大约 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

当前书籍:

enter image description here

2 个答案:

答案 0 :(得分:2)

试试:

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)))

答案 1 :(得分:1)

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

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

相关问题