字符串匹配和相应指定标签

问题描述 投票:0回答:1

我想有在数据帧中它说指示剂“LH”或‘RH’一个NEW_COLUMN。我曾尝试在ADDITIONAL_INFO列下面的代码。

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

我想匹配,如果在左,右的关键字匹配或者与列的MATA_info',“tech_info”和“ADDITIONAL_INFO”名为“关系”应创建并相应地将值分配给左或右,然后附加列。

   MATA_info  tech_info   additional_info  Relation
3,50X085Right    F85        NAN              RH
3,50X085Left     F85        lh               LH
python pandas
1个回答
1
投票

使用str.containsapply,然后检查是否每通过True行至少一个DataFrame.any,最后将它传递给numpy.select

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)
© www.soinside.com 2019 - 2024. All rights reserved.