У меня есть фрейм данных компаний, который называется slave <class 'pandas.core.frame.DataFrame'>
:
Date ID Name Company Email
2018 1 AB Apple apple@apple.com
2017 2 BC MicroSoft ms@ms.com
2016 3 CD Amazon amz@amz.com
. Company
столбец - это тип объекта, а не строка.
и другой большой фрейм данных (2 ГБ)) основных данных <class 'pandas.core.frame.DataFrame'>
:
code company_name product
123 MicroSoft Windows
456 Apple iphone
789 Amazon cloud
Тип company_name
является объектом того же типа, что и Company
, а не строкой.
Я хочу просмотреть каждое значениев Company
значение в company_name
второго DF и добавить совпадение к серии:
def finder(slave, master):
finalList = []
for company in slave['Company']:
if type(company) == 'some_specific_type':
for info in master['company_name']:
if company in info:
finalList.append(master.loc[str(info)]['code'])
break
else:
finalList.append(company)
return finalList
как процесс поиска может быть намного быстрее для такой ситуации?главный список составляет 20 м строк, а токовая петля очень медленная.
slave['newCode'] = finder(slave, master) // very slow
результат будет:
Date ID Name Company Email newCode
2018 1 AB Apple apple@apple.com 456
2017 2 BC MicroSoft ms@ms.com 123
2016 3 CD Amazon amz@amz.com 789
я проверяю тип значения, это непростая операция слияния.Dlave и master DF не имеют одинаковый размер строк, master - это 20-метровые строки, тогда как slave - всего 1K строк.и я хочу сравнить столбец company_name
, но получить соответствующее значение строки из другого столбца code
и сохранить его как новый столбец в ведомой таблице.
Моя цель: как я могу использоватьВместо NumPy, используя векторизацию с массивами NumPy?