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

问题陈述

想要str.contains在具有条件的 df 列之间进行到具有以下条件的另一列

  1. 1st 想看到1_Match或者1_1_Match是 Yes 或 No,如果是 No 则2_Match变得不适用

  2. 如果 1_Match 为Yes或 1_1_Match 为 Yes,则要检查Country(EU) 是否在/包含Nation(Europe)。如果是,则2_Match变为

  3. 如果Country(APAC) 和Nation(India)之间不包含或不存在部分匹配,则2_Match变为No

DF1

Country          Nation         1_Match   1_1_Match

EU               Europe         Yes       No

MA               MACOPEC        No        No

APAC             INDIA          Yes       No

COPEC            MACOPEC        No        Yes

COPEC            India          No        Yes 

预期输出:


DF1


Country       Nation           1_Match       1_1_Match   2_Match

EU            Europe             Yes           No        Yes

MA            MACOPEC            No            No        Not Applicable

APAC          INDIA              Yes           No        No

COPEC         MACOPEC            No            Yes       Yes

Copec         India              No            Yes       No

代码(不工作):我正在为条件 2 和 3 编写代码,但它抛出错误,然后我也想适应条件 1


df1['2_Match']  = np.where(df1['Country'].str.strip().str.lower().str.contains(df1['Nation'].str.strip().str.lower().astype(str)),'Yes','No')



犯罪嫌疑人X
浏览 140回答 1
1回答

皈依舞

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_Match0      EU   Europe     Yes             Yes1      MA  MACOPEC      No  Not Applicable2    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_Match0      EU   Europe     Yes        No             Yes1      MA  MACOPEC      No        No  Not Applicable2    APAC    INDIA     Yes        No              No3   COPEC  MACOPEC      No       Yes             Yes编辑2:masks = [m1 & ~m3, m2]vals = ['Not Applicable','Yes']print (df)  Country   Nation 1_Match 1_1_Match         2_Match0      EU   Europe     Yes        No             Yes1      MA  MACOPEC      No        No  Not Applicable2    APAC    INDIA     Yes        No              No3   COPEC  MACOPEC      No       Yes             Yes4   COPEC  India        No       Yes             No
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python