Объединение двух DataFrame в Pandas по индексу
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Чтобы объединить датафреймы df1
и df2
согласно их индексам, используйте функцию merge
из библиотеки Pandas, применив параметры left_index=True
и right_index=True
:
merged_df = pd.merge(df1, df2, left_index=True, right_index=True)
Этот код создаст датафрейм, объединенный по общим индексам.
Если же задача сводится к объединению с учётом всех индексов, воспользуйтесь методом concat
:
concatenated_df = pd.concat([df1, df2], axis=1, join='outer')
В результате получится датафрейм, который включает в себя все индексы из df1
и df2
.
Выбор типа объединения
Чтобы оптимизировать операцию объединения данных под ваши задачи, измените параметр how=...
в функции pd.merge
:
# Внешнее объединение, включающее все доступные значения
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
:
df1 = df1.set_index('key_column')
df2 = df2.set_index('key_column')
Если после многократных объединений структура таблицы стала запутанной, рекомендуется вернуть индекс обратно в колонку:
df1.reset_index(inplace=True)
Визуализация
Объединение датафреймов визуально напоминает формирование круга общих знакомых:
Датафрейм A (👨🦲): [Человек 1 🟢, Человек 2 🔵, Человек 3 🟣]
Датафрейм B (👩🦰): [Человек 2 🔴, Человек 3 🟠, Человек 4 🟡]
Объединение по индексу формирует группу, состоящую из общих контактов:
👫: [Человек 2 (🔵🔴), Человек 3 (🟣🟠)]
Результат: Круг общих друзей, что позволяет не учитывать "одиночек".
Контроль размерностей
Перед применением pd.concat
удостоверьтесь, что количество столбцов в объединяемых датафреймах совпадает:
# Убедитесь, что не пытаетесь смешать несовместимые данные
assert df1.shape[1] == df2.shape[1], "Предупреждал же, не мешайте яблоки с апельсинами!"
Иначе вы рискуете получить совершенно неожиданную комбинацию, что может негативно сказаться на качестве объединенных данных.
Примечание к работе со сводками
С особой внимательностью контролируйте типы данных индексов сводных таблиц – они могут быть весьма изменчивыми. Здесь вам пригодится функция pd.to_numeric
, оберегающая от неприятных "подскальзываний".
Экспорт в Excel
После выполнения всех этапов объединения подумайте о сохранении результата в формате Excel с помощью метода .to_excel()
. Это отличный способ для хранения данных и их обмена с теми, кто пока не знаком с "диалектом панд".
Полезные материалы
- pandas.DataFrame.merge — документация pandas 2.2.0 — Официальное руководство по использованию функции merge.
- Как объединять, присоединять, конкатенировать и сравнивать — документация pandas 2.2.0 — Обзор всех доступных методов объединения датафреймов.
- Объединение двух датафреймов по индексу – Stack Overflow — Обсуждение проблем и решений, связанных с объединением.
- Основы объединения в Pandas – Stack Overflow — Анализ и детали механизмов объединения.
- Комбинирование данных: merge и join | Руководство по науке о данных с использованием Python — Глубокий анализ методов с практическими примерами.
- Merge, Join, Concat и многое другое в Pandas — Материалы для самостоятельного изучения различных методов объединения.