Использование pd.merge
и sort_index
с указанием na_position='first'
pd.merge(df2.reset_index(),
df.reset_index().rename(columns={'index':'type'}),
'outer')\
.set_index(['type', 'index'])\
.sort_index(na_position='first')
col1 col2 col3 col4 col5
type index
A NaN 3.0 4.0 1.0 2.0 1.0
j 0.5 0.7 0.1 NaN NaN
l 0.5 0.3 0.2 NaN NaN
n 0.3 0.3 0.2 NaN NaN
B NaN 2.0 1.0 2.0 3.0 1.0
k 0.2 0.3 0.9 NaN NaN
o 0.1 0.7 0.3 NaN NaN
C NaN 2.0 3.0 4.0 2.0 1.0
m 0.8 0.7 0.1 NaN NaN
Как выделено @jpp, в документах для sort_index
itговорит, что
na_position: {'first', 'last'}, по умолчанию 'last' сначала ставит NaN в начале, последний ставит NaN в конце. Не реализовано для MultiIndex.
, хотя кажется, что действительно реализовано .
Однако, если вы считаете, что это поведение может быть противоречивым, альтернативой является сначала sort_values
, а затем только установка индекса.В sort_values
Документах такого не реализованного предупреждения не существует.
pd.merge(df2.reset_index(),
df.reset_index().rename(columns={'index':'type'}),
'outer')\
.sort_values(['type', 'index'], na_position='first')\
.set_index(['type', 'index'])