Слияние / соединение / добавление двух фреймов данных Pandas со столбцами MultiIndex как по индексу, так и по столбцам

Я бился головой о стол из-за этого, не мог понять, есть ли способ, может быть, я пытаюсь сделать что-то невозможное.

У меня есть два DataFrames со столбцами MultiIndex (три уровня) и индекс времени (один уровень). Первый такой:

border           a-b                 c-d
from               a         b         c
to                 b         a         d
2009-03-01 -0.778346 -0.928997       NaN
2009-03-02 -1.352559  1.247335       NaN
2009-03-03 -0.967939  0.432638       NaN
2009-03-04  0.786094 -2.209559       NaN
2009-03-05 -0.001338  1.084152       NaN
2009-03-06  1.163334       NaN       NaN
2009-03-07 -0.587593       NaN       NaN
2009-03-08  0.118469       NaN       NaN
2009-03-09       NaN       NaN -1.272959
2009-03-10       NaN       NaN -1.207129
2009-03-11       NaN       NaN  0.244019

К этому DF я хочу добавить следующее:

border           a-b
from               a
to                 b
2009-03-09  1.243296
2009-03-10 -0.049870
2009-03-11  1.599999

С учетом индексов как строк, так и столбцов. Результат должен быть:

border           a-b                 c-d
from               a         b         c
to                 b         a         d
2009-03-01 -0.778346 -0.928997       NaN
2009-03-02 -1.352559  1.247335       NaN
2009-03-03 -0.967939  0.432638       NaN
2009-03-04  0.786094 -2.209559       NaN
2009-03-05 -0.001338  1.084152       NaN
2009-03-06  1.163334       NaN       NaN
2009-03-07 -0.587593       NaN       NaN
2009-03-08  0.118469       NaN       NaN
2009-03-09  1.243296       NaN -1.272959
2009-03-10 -0.049870       NaN -1.207129
2009-03-11  1.599999       NaN  0.244019

Я пробовал несколько способов, в том числе слияние и присоединение, но не могу заставить его работать.

Любые идеи? Заранее спасибо.

P.S. Я мог бы опубликовать код, который я использовал для генерации двух DF выше, если это нужно для какой-либо помощи, но это немного длинновато. Но в любом случае я ищу общий ответ, точное имя столбцов или индекс для строк не имеет значения (может даже быть индексом целых чисел).


person David    schedule 20.12.2013    source источник


Ответы (1)


попробуйте pandas.DataFrame.update

DataFrame.update(other, join='left', overwrite=True,
                 filter_func=None, raise_conflict=False)

Измените DataFrame на месте, используя значения, отличные от NA, из переданного DataFrame. Выравнивается по индексам

person behzad.nouri    schedule 20.12.2013
comment
В v0.13.1 он не поддерживает никаких других методов соединения, кроме left ... Если бы у него был внешний, это было бы именно то, что я ищу! - person PhilMacKay; 18.02.2014