Как сканировать символы в строках, чтобы отметить правильность совпадения

У меня есть 2 столбца строк, и я хотел бы создать столбец с да или нет, если первые 3 символа каждой строки в их строке совпадают. В основном код, который проходит через первые 3 символа столбца 1 строки 1 и сравнивает его с столбцом 2 строки 1, чтобы увидеть, совпадают ли первые 3 символа; если да, то он должен напечатать YES в столбце 3, как показано в примере.

IE: Строка 1 Столбец 1 сканирует pas и ищет в Строке 1 Столбец 2 и сканирует pas, что означает, что они одинаковы и должны быть истинными в Столбце 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     |
+-------------+---------+----------+---------+

У меня нет кода для показа, так как я не уверен, как это запустить. Спасибо.


person Gilles    schedule 28.08.2020    source источник


Ответы (1)


Вот однострочный:

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

Эмпирическое правило: почти все, что вы делаете с данными pandas/numpy, лучше делать в векторном формате, то есть без использования циклов.

Шаг 1: извлеките первые три буквы из всех строк в столбце: Вы можете выполнять почти все стандартные строковые операции со столбцами через объекты df['col'].str. Здесь: df['Col1'].str[:3]

Шаг 2: проверьте, совпадают ли трехсимвольные префиксы: опять же, вы можете напрямую сравнивать столбцы, чтобы получить столбец логических значений. df['Col1'].str[:3] == df['Col2'].str[:3]

Шаг 3: замените логические значения на «ДА» и «НЕТ». Надеюсь, вы видите, к чему все идет: boolean_data.map({True: 'YES', False: 'NO'})

person Marat    schedule 28.08.2020
comment
Я бы также сначала преобразовал типы столбцов в str. В основном df['Col1'].astype(str).str[:3] - person Mohsin hasan; 28.08.2020