Вы правы в том, что эта проблема предназначена для однострочного запроса sqlite:
CREATE TABLE IF NOT EXISTS z AS
SELECT section, x.buyernames AS buyernames_id, y.buyers AS buyers_id
FROM x JOIN y ON x.buyernames = y.buyers;
... но это, конечно, возможно и в пандах. На мой взгляд, самый простой способ - создать два отдельных фрейма данных, по одному из каждой базы данных. Затем используйте pandas 'concat', чтобы объединить два кадра данных. В документации есть довольно хорошее описание опций.
Я могу изобразить ваши таблицы, но мне не совсем понятна структура. Было бы лучше, если бы вы просмотрели примеры и нашли, какой из них соответствует вашей проблеме, и я могу помочь вам в дальнейшем. Возможно, конкат не лучший подход; также есть команда соединения.
Что касается последнего шага, я не уверен, какой API вы планируете использовать для новой базы данных, поэтому сложно дать вам конкретное руководство по заполнению новой таблицы. У Pandas определенно есть возможность отправить sql , но я не знаю какого-либо способа создать новую таблицу . Лучше всего подойдет sqlalchemy , но у него есть кривая обучения, если вы незнакомы с ORM или базами данных в целом.
РЕДАКТИРОВАТЬ: так как вы не можете предоставить данные, вот вымышленный пример команды соединения. Это должно быть очень быстро, не так быстро, как raw sql, но, конечно, быстрее, чем цикл for. Во-первых, фиктивные данные:
left = pd.DataFrame({'buyernames': ['john', 'frank', 'joe', 'june'],
'section': ['s1', 's2', 's1', 's2'],
'col3': ['C0', 'C1', 'C2', 'C3'],
'col4': ['D0', 'D1', 'D2', 'D3']},
index=[0, 1, 2, 3])
right = pd.DataFrame({'buyers': ['june', 'john', 'frank', 'joe'],
'section': ['s1', 's2', 's1', 's2'],
'col3': ['C4', 'C5', 'C6', 'C7'],
'col4': ['D4', 'D5', 'D6', 'D7']},
index=[4, 5, 6, 7])
и команды панд:
result = pd.merge(left, right, on='section')