Соединяем DataFrame в Pandas и сохраняем оригинальные индексы

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

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

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

Если требуется вертикальное или горизонтальное объединение датафреймов, вы можете использовать pd.concat:

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

В случае необходимости объединения на основе общего ключа используйте pd.merge:

Python
Скопировать код
combined = pd.merge(df1, df2, on='key')

pd.concat позволяет "склеивать" таблицы, в то время как pd.merge обеспечивает функциональность, аналогичную SQL-соединениям. Важно выбрать правильные ключи для объединения и определить, требуется ли сохранять исходные индексы или сбросить их при использовании метода concat.

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

Основные приемы объединения датафреймов (DataFrames)

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

Python
Скопировать код
df_merged = df1.append(df2, ignore_index=False) # Исходные индексы сохраняются.

При работе с несколькими датафреймами вы можете добавить их в список для последующей конкатенации:

Python
Скопировать код
dataframes = [df1, df2, df3]  
combined = pd.concat(dataframes, ignore_index=True)

Для обновления данных из датафрейма df2 в df1, примените метод update():

Python
Скопировать код
df1.update(df2)

Перед выполнением обновления проверьте корректность индексов.

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

Можно визуализировать объединение датафреймов, представив процесс как сложение двух колод карт:

Markdown
Скопировать код
Колода А (🂠): [Туз пик, 2 червей, 3 бубен]
Колода В (🃟): [Валет треф, 2 червей, Туз бубен]

Процесс объединения через pd.concat() выглядит следующим образом:

Markdown
Скопировать код
🂠 + 🃟: [Туз пик, 2 червей, 3 бубен, Валет треф, 2 червей, Туз бубен]

Тогда как результат внутреннего соединения с использованием pd.merge() будет таким:

Markdown
Скопировать код
🂠 – 🃟: [2 червей]

pd.merge() с полным соединением дает следующий результат:

Markdown
Скопировать код
🂠 ⋈ 🃟: [Туз пик, 2 червей, 3 бубен, Валет треф, Туз бубен]

Особые случаи, которые следует учесть

Объединение с присутствующими дубликатами

Для удаления дубликатов в процессе объединения примените метод drop_duplicates(). Функция Pandas это не делает автоматически.

Python
Скопировать код
combined = pd.concat([df1, df2]).drop_duplicates().reset_index(drop=True)

Работа с пересекающимися данными

Если ваши датафреймы имеют пересекающиеся данные, метод combine_first() заполнит пробелы в данных одной таблицы значениями из другой.

Python
Скопировать код
df_combined = df1.combine_first(df2)

Соединение по нескольким ключам

Чтобы выполнить объединение таблиц по нескольким ключам, используйте pd.merge(), указав соответствующие ключи:

Python
Скопировать код
combined = pd.merge(df1, df2, left_on=['key1', 'key2'], right_on=['key3', 'key4'], how='inner')

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

  1. pandas.DataFrame.merge — документация pandas 2.2.0. Документация по методу "слияние" библиотеки pandas.
  2. pandas.concat — документация pandas 2.2.0. Инструкция по использованию метода конкатенации в pandas.
  3. Merge, join, concatenate and compare — документация pandas 2.2.0. Подробное руководство по осуществлению объединения данных с помощью pandas.
  4. Python Pandas Tutorial 9. Merge Dataframes – YouTube. Видео от канала Data School, в котором подробно рассмотрен процесс объединения датафреймов.