我想有在数据帧中它说指示剂“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
使用str.contains
与apply
,然后检查是否每通过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)