У меня есть два df с двумя строковыми столбцами, как показано ниже:
Df1: у исходного df есть 2000 строк имен
Id Name
1 Paper
2 Paper
3 Scissors
4 Mat
5 Cat
6 Cat
2nd Df: у исходного df есть 1000+ Item_Name
Item_ID Item_Name
1 Paper Bag
2 wallpaper
3 paper
4 cat cage
Мне нужны строки в столбце Name
, которые находятся в столбце Item_Name
1-й подход: с помощью str.contains
:
Я знаю, каксопоставить строку, если их был один столбец и несколько строк для сопоставления, как показано ниже:
df[df['Name'].str.contains("paper|cat", na=False)]
Но как это сделать, если есть два столбца строки (name & Item_name), которые должны быть сопоставлены ?
2-й подход: Fuzzywuzzy
matched = []
for row in df1.index:
name = df1.get_value(row,"Name")
for columns in df2.index:
item_name=df2.get_value(columns,"Item_Name")
matched_token=fuzz.token_sort_ratio(name,item_name)
if matched_token> 80:
matched.append([name,item_name,matched_token])
Проблема будет в том, что он будет медленным, и мой желаемый результат - это немного больше, чем я получаю от нечетких слов.Вывод выглядит следующим образом:
Id Name Item_ID
1 Paper 1,2,3
2 Paper 1,2,3
3 Scissors NA
4 Mat NA
5 Cat 4
6 Cat 4
Суммировать :
- Как сделать str.contains, если их два df с другим именем столбца
- Как преобразовать df для получения указанного выше результата