Мне нужно сопоставить Name
от df1 до Item_Name
от df2.Везде, где совпадает имя, мне также нужны Item_Id
и Material_Name
от df2.
У меня есть два фрейма данных:
Df1:
Исходный df имеет 1000+ Name
Id Name
1 Paper
2 Paper Bag
3 Scissors
4 Mat
5 Cat
6 Good Cat
2-й DF:
Исходный df имеет 1000+ Имя_имя
Item_ID Item_Name Material_Name
1 Paper Bag Office
2 wallpaper Decor
3 paper Office
4 cat cage Animal Misc
5 good cat Animal
Ожидаемый результат:
Id Name Item_ID Material_Name
1 Paper 1,2,3 Office,Decor,Office
2 Paper Bag 1,2,3 Office,Decor,Office
3 Scissors NA NA
4 Mat NA NA
5 Cat 4,5 Animal Misc, Animal
6 Good Cat 4,5 Animal Misc,Animal
Код:
def matcher(query):
matches = [i['Item_ID'] for i in df2[['Item_ID','Name']].to_dict('records') if any(q in i['Name'].lower() for q in query.lower().split())]
if matches:
return ','.join(map(str, matches))
else:
return 'NA'
df1['Item_ID'] = df1['Name'].apply(matcher)
Это работало правильно, когда мне нужно иметь один столбец, и в настоящее время я запускаю этот код дважды, чтобы получить Item_ID
и Material_Name
.
ASK:
Нужна помощь, если есть другой способ не запускать функцию дважды , но я могу получить даже 2 или 3 столбца водин раз