У меня есть два фрейма данных:
Df1:
Оригинал df имеет 1000+ Имя
Id Name
1 Paper
2 Paper Bag
3 Scissors
4 Mat
5 Cat
6 Good Cat
2nd Df:
Оригинал df имеет1000+ Item_Name
Item_ID Item_Name
1 Paper Bag
2 wallpaper
3 paper
4 cat cage
5 good cat
Ожидаемый результат:
Id Name Item_ID
1 Paper 1,2,3
2 Paper Bag 1,2,3
3 Scissors NA
4 Mat NA
5 Cat 4,5
6 Good Cat 4,5
Мой код:
def matcher(x):
res = df2.loc[df2['Item_Name'].str.contains(x, regex=False, case=False), 'Item_ID']
return ','.join(res.astype(str))
df1['Item_ID'] = df1['Name'].apply(matcher)
Текущие вызовы
str.contains
работает, когда имя имеет Paper, а Item_Name - Paper Bag, но не работает наоборот.Итак, в моем примере это работает для строки 1,3,4,5 для df1
, но не для строки 2 и 6. Таким образом, это будет не map строка 2 df1 со строкой 3из df2
Ask
Так что, если вы можете помочь мне в изменении кода, чтобы он мог помочь в сопоставлении с другим раундом также