检查数据帧的列中是否存在某个特定字符串;如果存在,则为其添加前缀

2024-06-01 20:56:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我想要一个解决方案,在这个解决方案中,我必须检查dataframe列的值是否有特定的代码,如果是,我将为它添加一个预定义的前缀。为了使它更简单,请查看以下示例。例如,我有一个如下所示的数据帧

PRODUCT_KEY
EXI-CD_5S-WW5678
EX-PWN-PRO-193
EX-NIS-NS-HZ049
EX-NCI-DSI-A-R
EX-GCA-FAC-F
AU-345654
NL-108793
HK-678903
WW-564312
DE-123243

所以对于这个专栏,我想做的是;我想检查它是否以'AU'或'NL'或'HK'或'ww'或'DE'开头,如果是这样,我将添加前缀'GST-YIP',其余的前缀将是相同的。生成的数据帧如下所示

PRODUCT_KEY
EXI-CD_5S-WW5678
EX-PWN-PRO-193
EX-NIS-NS-HZ049
EX-NCI-DSI-A-R
EX-GCA-FAC-F
GST-YIP-AU-345654
GST-YIP-NL-108793
GST-YIP-HK-678903
GST-YIP-WW-564312
GST-YIP-DE-123243

我试着在for循环内完成它

for i in df['PRODUCT_KEY']:
       if i.str.contains('AU'|'HK'|'WW'|'DE'):
          df['PRODUCT_KEY] = 'INC-AAB' + i
       else:
          f['PRODUCT_KEY] =  i

但这并没有给我正确的结果


Tags: 数据keynlcddeproduct解决方案ex
1条回答
网友
1楼 · 发布于 2024-06-01 20:56:51

使用np.where.str.startswith

Ex:

import numpy as np

df["New"] = np.where(df["PRODUCT_KEY"].str.startswith(('AU', 'NL','HK','WW')), "GST-YIP-"+df["PRODUCT_KEY"], df["PRODUCT_KEY"])
print(df)

输出:

        PRODUCT_KEY                 New
0  EXI-CD_5S-WW5678    EXI-CD_5S-WW5678 
1    EX-PWN-PRO-193      EX-PWN-PRO-193 
2   EX-NIS-NS-HZ049     EX-NIS-NS-HZ049 
3    EX-NCI-DSI-A-R      EX-NCI-DSI-A-R 
4      EX-GCA-FAC-F        EX-GCA-FAC-F 
5         AU-345654   GST-YIP-AU-345654 
6         NL-108793   GST-YIP-NL-108793 
7         HK-678903   GST-YIP-HK-678903 
8         WW-564312   GST-YIP-WW-564312 
9         DE-123243           DE-123243

使用正则表达式

Ex:

import re
ptrn = re.compile(r"^("+ "|".join(('AU', 'NL','HK','ww')) + r")", flags=re.I)
df["New"] = df["PRODUCT_KEY"].str.replace(ptrn, "GST-YIP-"+ r"\1") 

相关问题 更多 >