【问题标题】:how to split the string in one column and compare it with other column in Python如何将字符串拆分为一列并将其与Python中的另一列进行比较
【发布时间】:2019-06-05 17:52:26
【问题描述】:

假设我有一个如下的数据框:


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,并通过将 Ab IDS 除以 AB 和 100-4 来比较 1001-4 在 Ab_IDS 中

如果粘贴值和 AB_IDS 中的 1001-4 相同,我们需要创建一个名为 AB_Match 的新列并在该行中返回“Match”

AS 产生跟随比较 Paste_value 和 AC_ids 并创建名为 AC_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

【问题讨论】:

  • 这是R,你为什么要用pandas和python标记它
  • @d_kennetz 抱歉打错了问题我需要python中的解决方案现在我编辑它

标签: python pandas loops split


【解决方案1】:

你可以使用:

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                 

【讨论】:

【解决方案2】:

你可以用

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                  

【讨论】:

  • 感谢您的回答能否请您再次检查问题我需要更清楚的答案
猜你喜欢
  • 2020-12-09
  • 2015-04-04
  • 2022-06-14
  • 2014-01-05
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 2019-06-17
相关资源
最近更新 更多