В настоящее время я работаю над проектом, в котором имею дело с довольно большими наборами данных. У меня есть датафрейм transactions и другой users.
Итерации через фрейм данных транзакций не проблема. я использовал timeit и это займет чуть меньше минуты. Мой второй фрейм данных users имеет 1000 строк. Оба этих фрейма данных имеют столбец email. По сути, я пытаюсь получить userId в ряду в users что соответствует email в каждом transactions ряд. Мой текущий подход выглядит так:
for row in transactions.itertuples():
userId = users[users['email'] == getattr(row, 'email')]['userId'].values[0]
Этот простой поиск работает, но для моего случая он слишком медленный. Я держал его в работе более часа, но он все еще не закончил работу. Мне интересно, есть ли потенциально более быстрый способ выполнить этот поиск (возможно, сократить время работы до минут, а не часов)?
Заранее благодарю за любую помощь!
1 ответ
Ты можешь использовать DataFrame#merge.
df = transactions.merge(users, on="email")
![Оптимизация 950k + поисков в кадре данных pandas [closed] TheFAQ.ru](https://thefaq.ru/wp-content/uploads/2023/01/logo-250.png)