如何将字符串拆分为一列并将其与Python中的另一列进行比较

时间:2019-06-05 17:52:26

标签: python pandas loops split

假设我有一个数据框,如下所示:


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                        

我有一个与问题相同的新问题

1。我必须在粘贴值的最后一位中创建一个名为new_Paste_value的新列,该列应不与任何AB_IDS,AC_ID和AD_ID匹配我需要生成一个随机数,其最后一位应与所有这三个位数都不匹配IDS最后一位数字

我的结果看起来像这样

  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

2 个答案:

答案 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