Как сопоставить данные избегая дубликатов?

Есть файл CSV, с данными (каждая строка продублирована 4 раза):

|название товара|описание товара|цена товара|
|---------------|---------------|-----------|
|Весы MK_A20    |lorem          |7000       |
|Весы MK_A20    |lorem          |7000       |
|Весы MK_A20    |lorem          |7000       |
|Весы MK_A20    |lorem          |7000       |
|Весы MK_A11    |lorem          |7000       |
|Весы MK_A11    |lorem          |7000       |
|Весы MK_A11    |lorem          |7000       |
|Весы MK_A11    |lorem          |7000       |
|Весы MK_A21    |lorem          |7000       |
|Весы MK_A21    |lorem          |7000       |
|Весы MK_A21    |lorem          |7000       |
|Весы MK_A21    |lorem          |7000       |
...

И есть второй файл CSV c данными:

|название товара |
|----------------|
|Весы MK-3.2-A20 |
|Весы MK-6.2-A20 |
|Весы MK-15.2-A20|
|Весы MK-32.2-A20|
|Весы MK-3.2-A11 |
|Весы MK-6.2-A11 |
|Весы MK-3.2-A21 |
|Весы MK-6.2-A21 |
|Весы MK-15.2-A21|
...

Нужно сопоставить названия товара из двух этих файлов так, чтобы на выходе получился CSV и столбец название товара соответствовал столбцу из второй таблицы. То есть, на каждый вид весов MK_A20 есть несколько моделей - MK-3.2-A20, MK-6.2-A20, MK-15.2-A20, MK-32.2-A20. Для других видов весов моделей может быть другое кол-во но не больше 4-х как в примере выше, лишние строки удаляем:

|название товара  |описание товара|цена товара|
|-----------------|---------------|-----------|
|Весы MK-3.2-A20  |lorem          |7000       |
|Весы MK-6.2-A20  |lorem          |7000       |
|Весы MK-15.2-A20 |lorem          |7000       |
|Весы MK-32.2-A20 |lorem          |7000       |
|Весы MK-3.2-A11  |lorem          |7000       |
|Весы MK-6.2-A11  |lorem          |7000       |
|Весы MK-3.2-A21  |lorem          |7000       |
|Весы MK-6.2-A21  |lorem          |7000       |
|Весы MK-15.2-A21 |lorem          |7000       |
...


Ответы (1 шт):

Автор решения: MaxU
res = (d2
       .assign(x=d2["название товара"].str.replace("\-[\d\.]*\-", "_", regex=True))
       .merge(d1, left_on="x", right_on="название товара", suffixes=["","_2"])
       .drop(columns=["x", "название товара_2"])
       .drop_duplicates()
       .reset_index(drop=True))

результат:

In [180]: res
Out[180]:
    название товара описание товара  цена товара
0   Весы MK-3.2-A20           lorem         7000
1   Весы MK-6.2-A20           lorem         7000
2  Весы MK-15.2-A20           lorem         7000
3  Весы MK-32.2-A20           lorem         7000
4   Весы MK-3.2-A11           lorem         7000
5   Весы MK-6.2-A11           lorem         7000
6   Весы MK-3.2-A21           lorem         7000
7   Весы MK-6.2-A21           lorem         7000
8  Весы MK-15.2-A21           lorem         7000
→ Ссылка