Соедините две таблицы по разным столбцам - PullRequest
1 голос
/ 05 августа 2020

У меня есть два фрейма данных DB1 и DB2 в Pandas, оба со столбцом names, содержащим названия компаний. Я использовал нечеткое сопоставление строк с пакетом string_grouper, чтобы получить таблицу matches для компаний, присутствующих как в DB1, так и в DB2, в соответствии со столбцами names, которая выглядит так:

введите описание изображения здесь

Теперь я хочу присоединить DB1 и DB2 к matches, т.е. добавить их столбцы в совпадения, но только для компаний, которые отображаются в совпадениях.

Итак, я хочу использовать matches['left_side'] как эквивалент DB1 ['names'] (т. е. добавить к каждой строке matches строку из DB1, где DB1['names'] значение эквивалентно значению в matches['left_side']) и matches['right_side'] как эквивалент DB2 ['names'] в DB2. (т.е. добавьте к каждой строке matches строку из DB2, где DB2['names'] значение эквивалентно значению в matches['right_side'])

Как я могу это сделать?

I также подумайте, что может быть необходимо переименовать DB2 ['names'], поскольку в противном случае результирующая объединенная таблица будет иметь столбцы с одинаковыми именами из DB1 ['names'] и DB2 ['names']?

Edit: happy использовать SQL вместо Pandas при необходимости

1 Ответ

1 голос
/ 05 августа 2020
import pandas as pd

df_db1 = ...
df_db2 = ...
df_matches = ...

# merge matches with db1 and specify the columns you want to use as key
df_matches = df_matches.reset_index().merge(df_db1, left_on=['left_side'], right_on=['names'], how="left", suffixes=["matches_", "db1_"]).set_index("index")
# merge matches (already matched with db1) again with db2 and specify the new columns you want to use as key
df_matches = df_matches.reset_index().merge(df_db2, left_on=['right_side'], right_on=['names'], how="left", suffixes=["matches_", "db2_"]).set_index("index")

Часть. reset_index() ... .set_index("index") должна сохранить начальный индекс df_matches, иначе они будут сброшены.

Также вам не нужно переименовывать столбцы заранее, потому что вы можно использовать параметр suffixes следующим образом: suffixes=["matches_", "db1_"], который будет автоматически переименовывать столбцы, если есть 2 столбца с одинаковым именем.

Также имейте в виду, что если df_db1 или df_db2 имеет duplicates для ключа у вас также будут оба в новых df_matches. Если вы этого не хотите, вам придется до этого делать дубликаты управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...