在列中的字符串中查找匹配项

2024-10-02 04:27:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我在尝试匹配列时坚持使用正则表达式

我需要将第1列和第2列中的字符串与第3列匹配。如果有完整的数学,把1放在第4栏。问题是第1列和第3列中的字符串可以是大写或/和小写,包含符号,单词之间有空格等

输入:

 column1        | column2  | column3                  
BankWarehouse   |  GR      | BANK_WAREHOUSE, GR      
Bank_Warehouse  |  TU      | Tu, Bank Warehouse     
Bank Warehouse  |  TU      | Bank_Warehouse_GR      
BankWarehouse   |  GR      | BankWarehouse_gr    

以下是预期列为4的输出:

 column1        | column2  | column3                  | column4
BankWarehouse   |  GR      | BANK_WAREHOUSE, GR       |     1
Bank_Warehouse  |  TU      | Tu, Bank Warehouse       |     1
Bank Warehouse  |  TU      | Bank_Warehouse_GR        |     0
BankWarehouse   |  GR      | BankWarehouse_gr         |     1

有没有办法不用正则表达式来处理它?因为它完全让我震惊


Tags: 字符串数学warehousebankcolumn1大写grtu
2条回答

如果您愿意,您可以以一种简单(但可能不好看)的方式工作: 创建一个列连接col1和col2中的行,并清除标点符号。然后也清洁col3并尝试匹配

你必须保持排成这样吗?或者你能改变什么

以下是我将如何着手:

df["column4"] = df.apply(
    lambda x: (
        re.sub(r"[^a-zA-Z+]", "", (x.column1 + x.column2).strip().lower())
        in re.sub(r"[^a-zA-Z+]", "", x.column3.strip().lower())
    )
    or (
        re.sub(r"[^a-zA-Z+]", "", (x.column2 + x.column1).strip().lower())
        in re.sub(r"[^a-zA-Z+]", "", x.column3.strip().lower())
    ),
    axis=1,
)

相关问题 更多 >

    热门问题