假设我有一个数据框,如下所示:
Paste_Values AB_IDs AC_IDs AD_IDs
AE-1001-4 AB-1001-0 AC-1001-4 AD-1001-2
AE-1964-7 AB-1964-2 AC-1964-7 AD-1964-1
AE-2211-1 AB-2211-1 AC-2211-3 AD-2211-2
AE-2182-4 AB-2182-4 AC-2182-7 AD-2182-5
我想将Paste_value列拆分为AE和1001-4,然后将AB1-4S拆分为Ab IDS,然后比较1001-4在Ab_IDS中
如果粘贴值和AB_IDS的1001-4相同,我们需要创建一个称为AB_Match的新列,并在该行中返回“匹配”
AS产生后,将Paste_value与AC_ids进行比较,并创建一个名为AC_match的新列(如果它的匹配项显示其中包含“ match”)
Paste_Values AB_IDs AC_IDs AD_IDs AB_match Ac_match AD_match
AE-1001-4 AB-1001-0 AC-1001-4 AD-1001-2 Match
AE-1964-7 AB-1964-2 AC-1964-7 AD-1964-1 Match
AE-2211-1 AB-2211-1 AC-2211-3 AD-2211-2 Match
AE-2182-4 AB-2182-4 AC-2182-7 AD-2182-5 Match
我有一个与问题相同的新问题
Paste_Values AB_IDs AC_IDs AD_IDs AB_match AC_match AD_match new_p_v
AE-1001-4 AB-1001-0 AC-1001-4 AD-1001-2 Match AE-1001-5
AE-1964-7 AB-1964-2 AC-1964-7 AD-1964-1 Match AE-1964-4
AE-2211-1 AB-2211-1 AC-2211-3 AD-2211-2 Match AE-2211-8
AE-2182-4 AB-2182-4 AC-2182-7 AD-2182-5 Match AE-2182-6
答案 0 :(得分:4)
您可以使用:
m=df.filter(like='ID').apply(lambda x: x.str.split('-',n=1).str[1])
m.columns=[i.split('_')[0]+'_Match' for i in m.columns]
m[:]=np.where(m.eq(df.Paste_Values.str.split('-',n=1).str[1],axis=0),'Match','')
df_final=df.join(m)
Paste_Values AB_IDs AC_IDs AD_IDs AB_Match AC_Match AD_Match
0 AE-1001-4 AB-1001-0 AC-1001-4 AD-1001-2 Match
1 AE-1964-7 AB-1964-2 AC-1964-7 AD-1964-1 Match
2 AE-2211-1 AB-2211-1 AC-2211-3 AD-2211-2 Match
3 AE-2182-4 AB-2182-4 AC-2182-7 AD-2182-5 Match
答案 1 :(得分:3)
您可以使用
s=df.apply(lambda x : x.str.split('-',1).str[-1])
s=s.drop('Paste_Values',1).eq(s.Paste_Values,0).replace({False:'',True:'Match'})
s.columns=s.columns.str.replace('IDs','match')
df=pd.concat([df,s],axis=1)
df
Out[221]:
Paste_Values AB_IDs AC_IDs AD_IDs AB_match AC_match AD_match
0 AE-1001-4 AB-1001-0 AC-1001-4 AD-1001-2 Match
1 AE-1964-7 AB-1964-2 AC-1964-7 AD-1964-1 Match
2 AE-2211-1 AB-2211-1 AC-2211-3 AD-2211-2 Match
3 AE-2182-4 AB-2182-4 AC-2182-7 AD-2182-5 Match