Слияние/присоединение таблиц (python, библиотека pandas)?

Подскажите пожалуйста как правильно осуществить слияние двух датафрэймов
In [1]: df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
   ...:                     'B': ['B0', 'B1', 'B2', 'B3'],
   ...:                     'C': ['C0', 'C1', 'C2', 'C3'],
   ...:                     'D': ['D0', 'D1', 'D2', 'D3']},
   ...:                     index=[0, 1, 2, 3])

In [2]: df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
   ...:                     'B': ['B4', 'B1', 'B2', 'B7'],
   ...:                     'C': ['C4', 'C1', 'C2', 'C7'],
   ...:                     'D': ['D4', 'D5', 'D6', 'D7']},
   ...:                     index=[0, 1, 2, 3])

Необходимо выполнить слияние так, что-бы строки которые имеют хоть по одному одинаковому элементу заменились на строки в первом датафрэме строками из второго датафрэйма, а у тех у которых совпадений не найдено просто добавились в конец первого же датафрэйма.

таблица 1 и таблица2
aa445381eb1a4a15ac4fd4ce3538418e.JPGв итоге необходимо получить
c9dac5aeceff4561afdb3b2bf9313962.JPG
  • Вопрос задан
  • 1880 просмотров
Пригласить эксперта
Ответы на вопрос 1
Можно попробовать в лоб "декларативно":
a) df_{a,b,c,d} = join df2, df1 по {a,b,c,d}
b) проекция на нужные атрибуты из df2 в каждом df_{a,...}
c) взяли индексы, которые не вошли в df_{a,b,c,d} и положили записи в rest
d) concat(df_{a,b,c,d}, rest)

Или проще императивно:
взяли два цикла по итераторам (DataFrame.iterrows()) и прошлись по обоим датасетам.

Что будет проще реализовать и быстрее работать? Честно сказать не очень очевидно, и возможно зависит от данных -- нужно пробовать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы