Объединение двух DataFrame в Pandas по двум столбцам
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для объединения двух DataFrame по нескольким ключам с помощью функции pd.merge()
, примените параметр on
:
merged_df = pd.merge(df1, df2, on=['Key1', 'Key2'])
Так, строки будут синхронизированы по столбцам 'Key1'
и 'Key2'
в обеих таблицах.
Любителей риска приглашаем поиграть c ключами для слияния
Если имена столбцов в ваших DataFrame очень похожи, кажется, что они созданы для того, чтобы быть вместе, но все же не совсем идентичны – не переживайте. pd.merge()
позволяет достойно справиться с данной задачей:
merged_df = pd.merge(df1, df2, left_on=['df1_key1', 'df1_key2'], right_on=['df2_key1', 'df2_key2'])
Здесь используются параметры left_on
и right_on
, которые позволяют указать несколько разных имен столбцов, обозначающих одинаковые данные.
Определитесь с 'how'
Параметр how
поможет выбрать тип слияния, необходимый для вашей задачи. Вот как это выглядит:
# Левостороннее слияние
left_joined_df = pd.merge(df1, df2, on=['Key1', 'Key2'], how='left')
# Правостороннее слияние
right_joined_df = pd.merge(df1, df2, on=['Key1', 'Key2'], how='right')
# Внутреннее слияние
inner_joined_df = pd.merge(df1, df2, on=['Key1', 'Key2'], how='inner')
# Полное слияние
outer_joined_df = pd.merge(df1, df2, on=['Key1', 'Key2'], how='outer')
Выберите метод, который наиболее уместно соответствует вашей задаче.
Не подходят индексы? Сбросьте их!
Иногда индексы – это основа ваших DataFrame, но они могут не совпадать. В таких ситуациях на помощь придет метод reset_index()
:
df1.reset_index(inplace=True)
df2.reset_index(inplace=True)
merged_df = pd.merge(df1, df2, on=['Key1', 'Key2'])
Этот метод – эффективный способ избежать индексного кризиса и синхронизировать несовпадающие индексы.
Визуализация
Проиллюстрируем процесс слияния двух DataFrame на примере пазлов с одинаковыми элементами:
DataFrame A: [Элемент 1, Элемент 2, Элемент 3]
DataFrame B: [Элемент 2, Элемент 3, Элемент 4]
Слияние схоже с подбором совпадающих элементов:
df_merged = pd.merge(dfA, dfB, on=['key1', 'key2'])
В результате получаем шедевр, составленный из частей обеих таблиц:
A🔗B: [Элемент 2, Элемент 3]
# Слияние для пазлов это как скотч для предметов!
В идеальном (столбцовом) мире все идеально, но не в этом случае!
Проверьте, что типы данных столбцов и имена столбцов совпадают. Вот некоторые полезные рекомендации:
df.dtypes
покажет вам типы данных столбцов.df.columns
раскроет имена столбцов.- Правильная последовательность пар в
left_on
иright_on
уменьшит вероятность ошибок.
Помните, что слияние проходит гладко, если столбцы согласованы.
Распространенные проблемы, вызывающие домино-эффект!
Вот некоторые часто встречающиеся сложности и пути их решения:
- KeyError: Используйте списки вместо строки для
on
,left_on
илиright_on
, чтобы избежать ошибок с ключами. - Несоответствие имен столбцов: Параметры
left_on
иright_on
помогут вам правильно сопоставить имена столбцов. - Столбцы с одинаковыми названиями после слияния: Используйте параметр
suffixes
для различения столбцов с идентичными названиями.
Делайте тестовые слияния, чтобы избежать проблем в будущем.
Полезные материалы
- pandas.DataFrame.merge — документация pandas 2.2.0 – Это ваш надежный источник официальной документации.
- Объединение данных в pandas с помощью merge(), .join(), и concat() – Real Python – Real Python упрощает комбинацию DataFrame.
- Узнайте, как объединять и соединять DataFrame в Pandas и Python — Полезные примеры для практического объединения данных.
- YouTube урок по слиянию DataFrame в Pandas – Образовательное видео для визуального освоения материала.
- Объединение DataFrame с использованием Pandas Merge – Замечательный материал, сочетающий теорию и практику.
- Merge, join, concatenate и compare — документация pandas 2.2.0 – Обширный источник знаний о методах слияния в pandas.