#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')