字符串匹配并相应地分配标记

2024-09-30 01:32:49 发布

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

我想在数据框中有一个新的“左”或“右”列。我在“附加信息”列中尝试了以下代码

LH = ['lhd','lh','lhd','left','le']
RH = [ 'rhd','rh','rhd','right,'re']
lh_rh= match_id[['MATA_info','tech_info','additional_info']]
lh_rh['additional_info']= lh_rh['additional_info'].str.lower()
Right = lh_rh.loc[lh_rh['additional_info'].isin(RH)]
left = lh_rh.loc[lh_rh['additional_info'].isin(LH)]   

如果LH和RH中的关键字与“MATA\u info”、“tech\u info”和“additional\u info”列匹配,则应创建名为“Relation”的附加列,并相应地为LH或RH赋值

   MATA_info  tech_info   additional_info  Relation
3,50X085Right    F85        NAN              RH
3,50X085Left     F85        lh               LH

Tags: infoleftloctechadditionalrhrelationlh
1条回答
网友
1楼 · 发布于 2024-09-30 01:32:49

^{}^{}一起使用,然后检查^{}是否每行至少有一个True,最后将其传递给^{}

LH = ['lhd','lh','lhd','left','le']
RH = [ 'rhd','rh','rhd','right','re']
lh_rh= match_id[['MATA_info','tech_info','additional_info']]
m1 = lh_rh.apply(lambda x: x.str.contains('|'.join(LH), na=False, case=False)).any(axis=1)
m2 = lh_rh.apply(lambda x: x.str.contains('|'.join(RH), na=False, case=False)).any(axis=1)

match_id['Relation'] = np.select([m1, m2], ['LH','RH'], default=np.nan)

print (match_id)
       MATA_info tech_info additional_info Relation
0  3,50X085Right       F85             NAN       RH
1   3,50X085Left       F85              lh       LH
2           4,56        %T              jj      nan

编辑:

pat1 = '|'.join(r"\b{}\b".format(x) for x in LH)
pat2 = '|'.join(r"\b{}\b".format(x) for x in RH)
m1 = lh_rh.apply(lambda x: x.str.contains(pat1, na=False, case=False)).any(axis=1)
m2 = lh_rh.apply(lambda x: x.str.contains(pat2, na=False, case=False)).any(axis=1)

相关问题 更多 >

    热门问题