字符串列表中的模式匹配,在熊猫中创建新列

Pyl*_*der 3 python regex pandas

我有一个具有以下通用格式的熊猫数据框:

id,product_name_extract
1,00012CDN
2,14311121NDC
3,NDC37ba
4,47CD27
Run Code Online (Sandbox Code Playgroud)

我还有一个我想要匹配的产品代码列表(不幸的是,我必须进行 NLP 提取,所以它不会是一个干净的匹配)然后创建一个具有匹配列表值的新列:

product_name = ['12CDN','21NDC','37ba','7CD2']

id,product_name_extract,product_name_mapped
1,00012CDN,12CDN
2,14311121NDC,21NDC
3,NDC37ba,37ba
4,47CD27,7CD2
Run Code Online (Sandbox Code Playgroud)

我不太担心会发生碰撞。

如果我只需要一个使用包含的真/假指标和用“|”连接在一起的列表值,这将很容易 用于交替,但我现在对如何创建完全匹配的列值感到有些困惑。任何提示或技巧表示赞赏!

sac*_*cuL 5

由于您不担心冲突,您可以将您的product_name列表与|运算符一起加入,并将其用作正则表达式:

df['product_name_mapped'] = (df.product_name_extract.str
                             .findall('|'.join(product_name))
                             .str[0])
Run Code Online (Sandbox Code Playgroud)

结果:

>>> df
   id product_name_extract product_name_mapped
0   1             00012CDN               12CDN
1   2          14311121NDC               21NDC
2   3              NDC37ba                37ba
3   4               47CD27                7CD2
Run Code Online (Sandbox Code Playgroud)