Соединяем DataFrame в Pandas и сохраняем оригинальные индексы
Быстрый ответ
Если требуется вертикальное или горизонтальное объединение датафреймов, вы можете использовать pd.concat
:
combined_vertical = pd.concat([df1, df2])
combined_horizontal = pd.concat([df1, df2], axis=1)
В случае необходимости объединения на основе общего ключа используйте pd.merge
:
combined = pd.merge(df1, df2, on='key')
pd.concat
позволяет "склеивать" таблицы, в то время как pd.merge
обеспечивает функциональность, аналогичную SQL-соединениям. Важно выбрать правильные ключи для объединения и определить, требуется ли сохранять исходные индексы или сбросить их при использовании метода concat
.
Основные приемы объединения датафреймов (DataFrames
)
Для сохранения исходных индексов после объединения используйте параметр ignore_index
:
df_merged = df1.append(df2, ignore_index=False) # Исходные индексы сохраняются.
При работе с несколькими датафреймами вы можете добавить их в список для последующей конкатенации:
dataframes = [df1, df2, df3]
combined = pd.concat(dataframes, ignore_index=True)
Для обновления данных из датафрейма df2
в df1
, примените метод update()
:
df1.update(df2)
Перед выполнением обновления проверьте корректность индексов.
Визуализация
Можно визуализировать объединение датафреймов, представив процесс как сложение двух колод карт:
Колода А (🂠): [Туз пик, 2 червей, 3 бубен]
Колода В (🃟): [Валет треф, 2 червей, Туз бубен]
Процесс объединения через pd.concat()
выглядит следующим образом:
🂠 + 🃟: [Туз пик, 2 червей, 3 бубен, Валет треф, 2 червей, Туз бубен]
Тогда как результат внутреннего соединения с использованием pd.merge()
будет таким:
🂠 – 🃟: [2 червей]
pd.merge()
с полным соединением дает следующий результат:
🂠 ⋈ 🃟: [Туз пик, 2 червей, 3 бубен, Валет треф, Туз бубен]
Особые случаи, которые следует учесть
Объединение с присутствующими дубликатами
Для удаления дубликатов в процессе объединения примените метод drop_duplicates()
. Функция Pandas
это не делает автоматически.
combined = pd.concat([df1, df2]).drop_duplicates().reset_index(drop=True)
Работа с пересекающимися данными
Если ваши датафреймы имеют пересекающиеся данные, метод combine_first()
заполнит пробелы в данных одной таблицы значениями из другой.
df_combined = df1.combine_first(df2)
Соединение по нескольким ключам
Чтобы выполнить объединение таблиц по нескольким ключам, используйте pd.merge()
, указав соответствующие ключи:
combined = pd.merge(df1, df2, left_on=['key1', 'key2'], right_on=['key3', 'key4'], how='inner')
Полезные материалы
- pandas.DataFrame.merge — документация pandas 2.2.0. Документация по методу "слияние" библиотеки pandas.
- pandas.concat — документация pandas 2.2.0. Инструкция по использованию метода конкатенации в pandas.
- Merge, join, concatenate and compare — документация pandas 2.2.0. Подробное руководство по осуществлению объединения данных с помощью pandas.
- Python Pandas Tutorial 9. Merge Dataframes – YouTube. Видео от канала Data School, в котором подробно рассмотрен процесс объединения датафреймов.