为了账号安全,请及时绑定邮箱和手机立即绑定

部分匹配 2 列与另一列的条件

部分匹配 2 列与另一列的条件

犯罪嫌疑人X 2021-11-16 15:31:54
问题陈述想要str.contains在具有条件的 df 列之间进行到具有以下条件的另一列1st 想看到1_Match或者1_1_Match是 Yes 或 No,如果是 No 则2_Match变得不适用如果 1_Match 为Yes或 1_1_Match 为 Yes,则要检查Country(EU) 是否在/包含Nation(Europe)。如果是,则2_Match变为是如果Country(APAC) 和Nation(India)之间不包含或不存在部分匹配,则2_Match变为NoDF1Country          Nation         1_Match   1_1_MatchEU               Europe         Yes       NoMA               MACOPEC        No        NoAPAC             INDIA          Yes       NoCOPEC            MACOPEC        No        YesCOPEC            India          No        Yes 预期输出:DF1Country       Nation           1_Match       1_1_Match   2_MatchEU            Europe             Yes           No        YesMA            MACOPEC            No            No        Not ApplicableAPAC          INDIA              Yes           No        NoCOPEC         MACOPEC            No            Yes       YesCopec         India              No            Yes       No代码(不工作):我正在为条件 2 和 3 编写代码,但它抛出错误,然后我也想适应条件 1df1['2_Match']  = np.where(df1['Country'].str.strip().str.lower().str.contains(df1['Nation'].str.strip().str.lower().astype(str)),'Yes','No')
查看完整描述

1 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

numpy.select与列表理解一起使用,in用于检查列之间的子字符串:


m1 = df['1_Match'] == 'No'

m2 = [c.lower() in n.lower() for c, n in zip(df['Country'], df['Nation'])]

masks = [m1, m2]

vals = ['Not Applicable','Yes']


df['2_Match'] = np.select(masks, vals, default='No')

print (df)

  Country   Nation 1_Match         2_Match

0      EU   Europe     Yes             Yes

1      MA  MACOPEC      No  Not Applicable

2    APAC    INDIA     Yes              No

编辑:


m1 = df['1_Match'] == 'No'

m2 = [c.lower() in n.lower() for c, n in zip(df['Country'], df['Nation'])]


m3 = df['1_1_Match'] == 'Yes'


masks = [m3, m1, m2]

vals = ['Yes', 'Not Applicable','Yes']


df['2_Match'] = np.select(masks, vals, default='No')

print (df)

  Country   Nation 1_Match 1_1_Match         2_Match

0      EU   Europe     Yes        No             Yes

1      MA  MACOPEC      No        No  Not Applicable

2    APAC    INDIA     Yes        No              No

3   COPEC  MACOPEC      No       Yes             Yes

编辑2:


masks = [m1 & ~m3, m2]

vals = ['Not Applicable','Yes']

print (df)

  Country   Nation 1_Match 1_1_Match         2_Match

0      EU   Europe     Yes        No             Yes

1      MA  MACOPEC      No        No  Not Applicable

2    APAC    INDIA     Yes        No              No

3   COPEC  MACOPEC      No       Yes             Yes

4   COPEC  India        No       Yes             No


查看完整回答
反对 回复 2021-11-16
  • 1 回答
  • 0 关注
  • 138 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信