Панды — Сравнение двух фреймов данных с использованием подстроки одного столбца фрейма данных

#pandas

Вопрос:

Я пытаюсь сравнить два кадра данных, используя подстроку в одном столбце, с другим кадром данных.

Ниже приведено, как выглядят мои данные:

Фрейм данных 1

 prod_name, prod_id, prod_category
prod_1, cate_1000101, category_1 
prod_2, cate_123001, category_2
prod_3, cate_900, category_3
prod_4, cate_808, category_4
 

Фрейм данных 2

 bill_id, bill_date, prod_ref
101, 2021-01-01, 3001
102, 2021-01-01, 5001
103, 2021-01-01, 8080
 

Я пытаюсь сравнить, доступна ли какая-либо часть prod_id из фрейма данных 1 в prod_ref в фрейме данных 2

Ожидаемый результат:

 prod_name, prod_id, bill_id, bill_date, prod_ref
prod_2, cate_123001, 101, 2021-01-01, 3001
prod_4, cate_808, 103, 2021-01-01, 8080
 

Комментарии:

1. Является prod_ref строковым столбцом?

2. @DeReKo, да, это строка типа

3. Существует ли ограничение на то, насколько коротким должно быть совпадение подстрок? Потому что , похоже prod_ref=5001 , он также может быть сопоставлен с любым prod_id содержимым 1 , например prod_id=cate_1000101

4. Когда вы произносите любую часть prod_id, есть ли минимальное количество цифр, которые вы готовы сравнить? 808 находится в 8080, но » 01 «с конца» 123001 «находится в» 3001 » и «5001».

5. @KevinNash о, здорово! когда вы сможете, вы должны принять свой собственный ответ, чтобы люди, у которых есть один и тот же вопрос, получили правильный ответ. Ваше здоровье!

Ответ №1:

Я смог получить необходимый результат, используя приведенные ниже

 df1.merge(df2, left_on = df2.prod_ref.str.extract('(d )', expand = False), right_on = df1.prod_id.str.extract('(d )', expand = False), how = 'left')