我需要将df1中的Name
匹配到df2中的Item_Name
。只要名称匹配,我还需要df2中的Item_Id
和Material_Name
。你知道吗
我有两个数据帧:
Df1型:
原始df有1000+个名称
Id Name
1 Paper
2 Paper Bag
3 Scissors
4 Mat
5 Cat
6 Good Cat
第二测向:
原始数据框有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
时,这一点可以正常工作。你知道吗
询问:
如果有其他方法不运行函数两次,需要帮助,但我可以一次获得2或3列
下面是使用^{} 和重用布尔掩码的一种方法:
您可以尝试从查询中获取
Item_ID
和Material_Name
作为元组,然后使用[i[0] for i in matches]
或[i[1] for i in matches]
应用适当的列。你知道吗相关问题 更多 >
编程相关推荐