Я ищу элегантный способ добавить все строки из одного DataFrame в другой DataFrame (оба DataFrames имеют одинаковый индекс и структуру столбцов), но в тех случаях, когда одно и то же значение индекса появляется в обоих DataFrames, используйте строку из второй кадр данных.
Итак, например, если я начинаю с:
df1:
A B
date
'2015-10-01' 'A1' 'B1'
'2015-10-02' 'A2' 'B2'
'2015-10-03' 'A3' 'B3'
df2:
date A B
'2015-10-02' 'a1' 'b1'
'2015-10-03' 'a2' 'b2'
'2015-10-04' 'a3' 'b3'
Я хотел бы получить результат:
A B
date
'2015-10-01' 'A1' 'B1'
'2015-10-02' 'a1' 'b1'
'2015-10-03' 'a2' 'b2'
'2015-10-04' 'a3' 'b3'
Это аналогично тому, что, как мне кажется, называется "upsert" в некоторых системах SQL - комбинация обновления и вставки в том смысле, что каждая строка из df2
является либо (a), используемой для обновления существующей строки в df1
, если ключ строки уже существует в df1
или (b) вставлен в df1
в конце, если ключ строки еще не существует.
Я придумал следующее
pd.concat([df1, df2]) # concat the two DataFrames
.reset_index() # turn 'date' into a regular column
.groupby('date') # group rows by values in the 'date' column
.tail(1) # take the last row in each group
.set_index('date') # restore 'date' as the index
который, кажется, работает, но это зависит от порядка строк в каждой группе по группе, всегда являющейся тем же самым, что и исходные DataFrames, которые я не проверял, и кажется неудовлетворительно запутанным.
Есть ли у кого-нибудь идеи для более простого решения?