Объединение двух DataFrame в Pandas по индексу

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы объединить датафреймы df1 и df2 согласно их индексам, используйте функцию merge из библиотеки Pandas, применив параметры left_index=True и right_index=True:

Python
Скопировать код
merged_df = pd.merge(df1, df2, left_index=True, right_index=True)

Этот код создаст датафрейм, объединенный по общим индексам.

Если же задача сводится к объединению с учётом всех индексов, воспользуйтесь методом concat:

Python
Скопировать код
concatenated_df = pd.concat([df1, df2], axis=1, join='outer')

В результате получится датафрейм, который включает в себя все индексы из df1 и df2.

Кинга Идем в IT: пошаговый план для смены профессии

Выбор типа объединения

Чтобы оптимизировать операцию объединения данных под ваши задачи, измените параметр how=... в функции pd.merge:

Python
Скопировать код
# Внешнее объединение, включающее все доступные значения
outer_merged_df = pd.merge(df1, df2, left_index=True, right_index=True, how='outer')

# Левое объединение, при котором df1 служит основой, а df2 дополняет его
left_merged_df = pd.merge(df1, df2, left_index=True, right_index=True, how='left')

Не забывайте согласовывать типы индексов обеих таблиц. При необходимости воспользуйтесь функцией apply(pd.to_numeric) для их приведения к общему формату.

Подготовка индекса

Если индексы ваших датафреймов пока не определены, установите их через метод DataFrame.set_index:

Python
Скопировать код
df1 = df1.set_index('key_column')
df2 = df2.set_index('key_column')

Если после многократных объединений структура таблицы стала запутанной, рекомендуется вернуть индекс обратно в колонку:

Python
Скопировать код
df1.reset_index(inplace=True)

Визуализация

Объединение датафреймов визуально напоминает формирование круга общих знакомых:

Markdown
Скопировать код
Датафрейм A (👨‍🦲): [Человек 1 🟢, Человек 2 🔵, Человек 3 🟣]
Датафрейм B (👩‍🦰): [Человек 2 🔴, Человек 3 🟠, Человек 4 🟡]

Объединение по индексу формирует группу, состоящую из общих контактов:

Markdown
Скопировать код
👫: [Человек 2 (🔵🔴), Человек 3 (🟣🟠)]

Результат: Круг общих друзей, что позволяет не учитывать "одиночек".

Контроль размерностей

Перед применением pd.concat удостоверьтесь, что количество столбцов в объединяемых датафреймах совпадает:

Python
Скопировать код
# Убедитесь, что не пытаетесь смешать несовместимые данные
assert df1.shape[1] == df2.shape[1], "Предупреждал же, не мешайте яблоки с апельсинами!"

Иначе вы рискуете получить совершенно неожиданную комбинацию, что может негативно сказаться на качестве объединенных данных.

Примечание к работе со сводками

С особой внимательностью контролируйте типы данных индексов сводных таблиц – они могут быть весьма изменчивыми. Здесь вам пригодится функция pd.to_numeric, оберегающая от неприятных "подскальзываний".

Экспорт в Excel

После выполнения всех этапов объединения подумайте о сохранении результата в формате Excel с помощью метода .to_excel(). Это отличный способ для хранения данных и их обмена с теми, кто пока не знаком с "диалектом панд".

Полезные материалы

  1. pandas.DataFrame.merge — документация pandas 2.2.0 — Официальное руководство по использованию функции merge.
  2. Как объединять, присоединять, конкатенировать и сравнивать — документация pandas 2.2.0 — Обзор всех доступных методов объединения датафреймов.
  3. Объединение двух датафреймов по индексу – Stack Overflow — Обсуждение проблем и решений, связанных с объединением.
  4. Основы объединения в Pandas – Stack Overflow — Анализ и детали механизмов объединения.
  5. Комбинирование данных: merge и join | Руководство по науке о данных с использованием Python — Глубокий анализ методов с практическими примерами.
  6. Merge, Join, Concat и многое другое в Pandas — Материалы для самостоятельного изучения различных методов объединения.