#python #pandas #knime
#python #pandas #knime
Вопрос:
У меня есть 2 столбца строк, и я хотел бы сопоставить строки на основе первых 3 символов в каждой строке. В основном код, который перебирает каждый символ столбца 1 строки 1 и сравнивает его со строками в столбце 2, чтобы найти наилучшее соответствие.
Т.Е.: столбец 1 строки 1 сканирует «p» «a»»s» и ищет в Col2 строки, начинающиеся с «p» «a»»s» и так далее для столбца 1 строки 2.
Я довольно новичок в Python; мои извинения.
Исходная таблица (несортированная):
------------- --------- ----------
| Row Index | Col1 | Col2 |
------------- --------- ----------
| 1 | pasta | sauce |
| 2 | sauce | orange |
| 3 | orange | pasta |
------------- --------- ----------
Ожидаемая таблица (после сопоставления)
------------- --------- ----------
| Row Index | Col1 | Col2 |
------------- --------- ----------
| 1 | pasta | pasta |
| 2 | sauce | sauce |
| 3 | orange | orange |
------------- --------- ----------
У меня нет никакого кода для показа, поскольку я не уверен, как это запустить. Спасибо.
Комментарии:
1. Что, если совпадений несколько или их вообще нет?
2. В моем случае всегда будет доступно совпадение. Что касается нескольких совпадений, это не будет проблемой. Представленная таблица является простым примером. Спасибо.
3. Из вашего примера похоже, что вы можете просто дублировать
Col1
— есть ли у вас реальные случаи, когда совпадают только первые три символа?4. Я не уверен, что понимаю, что вы подразумеваете под «реальными случаями, когда совпадают только первые три символа»; не могли бы вы объяснить?
5. В вашем примере все строки являются точными совпадениями. Но вы хотите сканировать только на основе первых трех символов. Это было бы необходимо, если бы вы хотели совместить такие слова, как «макароны» и «пассивный».
Ответ №1:
Вероятно, не самое быстрое и чистое решение, но вернет то, о чем вы просите:
df['Col3'] = df.Col1.apply(lambda x: [i for i in df.Col2 if i.startswith(x[:3])][0])
Комментарии:
1. Файл «pandas/ _libs/src inference.pyx», строка 1472, в pandas. _libs.lib.map_infer Файл «<string>», строка 4, в <lambda> ошибка с индексом: список индексов вне диапазона
2. Это означает, что у вас есть слова в столбце 1 без совпадений в столбце 2.