【问题标题】:How to scan characters in strings to flag if the match is correct如何扫描字符串中的字符以标记匹配是否正确
【发布时间】:2020-08-28 15:52:45
【问题描述】:

我有 2 列字符串,如果行中每个字符串的前 3 个字符匹配,我想创建一个带有“是”或“否”的列。基本上是遍历第 1 列第 1 行的前 3 个字符并将其与第 2 列第 1 行进行比较以查看前 3 个字符是否匹配的代码;如果是,那么它应该在第 3 列中打印 YES,如示例所示。

IE:第 1 行第 1 列扫描“p”“a”“s”并查看第 1 行第 2 列并扫描“p”“a”“s”表示它们是相同的,并且在第 3 列中应该为真.

我对 python 还很陌生;我很抱歉。

原表:

+-------------+---------+----------+
|  Row Index  |  Col1   |  Col2    |
+-------------+---------+----------+
| 1           | pasta   | pastas   |
| 2           | sauces  | orange   |
| 3           | kiwi    | kiwis    |
+-------------+---------+----------+

预期输出表:

+-------------+---------+----------+---------+
|  Row Index  |  Col1   |  Col2    |  Col3   |
+-------------+---------+----------+---------+
| 1           | pasta   | pastas   |  YES    |
| 2           | sauces  | orange   |  NO     |
| 3           | rosin   | robert   |  NO     |
+-------------+---------+----------+---------+

我没有任何代码可以显示,因为我不确定如何开始。谢谢。

【问题讨论】:

    标签: python pandas numpy knime


    【解决方案1】:

    这是一个单行:

    df['Col3'] = (df['Col1'].str[:3] == df['Col2'].str[:3]).map(
        {True: 'YES', False: 'NO'})
    

    经验法则:您对 pandas/numpy 数据所做的几乎所有事情都以矢量格式更好,即不使用循环。

    Step1:从列中的所有字符串中提取前三个字母: 您可以通过df['col'].str 对象对列执行几乎所有标准字符串操作。这里:df['Col1'].str[:3]

    Step2:检查 3-char 前缀是否匹配:同样,您可以直接比较列以获得布尔值列。 df['Col1'].str[:3] == df['Col2'].str[:3]

    第三步:用“YES”和“NO”替换布尔值。我希望你能看到它的去向:boolean_data.map({True: 'YES', False: 'NO'})

    【讨论】:

    • 我也会先将列类型转换为str。基本上 df['Col1'].astype(str).str[:3]
    猜你喜欢
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    相关资源
    最近更新 更多