как разбить строку в одном столбце и сравнить ее с другим столбцом в Python - PullRequest
0 голосов
/ 05 июня 2019

Допустим, у меня есть кадр данных следующим образом:


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 и сравнить 1001-4 в Ab_IDS путем разделения Ab IDS на ABи 100-4

, если 1001-4 совпадает в значении Paste и AB_IDS, нам нужно создать новые столбцы с именем AB_Match и вернуть «Match» в этой строке

КАК произвести get follow сравнить 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 ]

4 голосов
/ 05 июня 2019

Вы можете использовать:

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                 
3 голосов
/ 05 июня 2019

Вы можете сделать с

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                  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...