Присоединение к Пандам мультииндекс - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть фрейм данных Pandas, использующий мультииндекс, который был создан следующим образом:

indices = [['one', 'two', 'three', 'four'], ['oob']]
index = pd.MultiIndex.from_product(indices, names=['first', 'second'])

results = pd.DataFrame(index=index, columns=['col1', 'col2', 'col3', 'col4', 'col5'])

... input values ...

                    col1    col2    col3    col4    col5
   first    second
     one    oob     0.87    0.56    0.46    0.50    0.48
     two    oob     0.87    0.57    0.23    0.33    0.26
   three    oob     0.76    0.25    0.36    0.30    0.33
    four    oob     0.73    0.23    0.38    0.29    0.33

Что я хотел бы сделать, так это добавить еще один уровень (я считаю, что это правильный термин) в фрейм данных, чтобы он выглядел следующим образом:

                    col1    col2    col3    col4    col5
   first    second
     one    oob     0.87    0.56    0.46    0.50    0.48
     one    meh     NaN     NaN     NaN     NaN     Nan
     two    oob     0.87    0.57    0.23    0.33    0.26
     two    meh     NaN     NaN     NaN     NaN     Nan
   three    oob     0.76    0.25    0.36    0.30    0.33
   three    meh     NaN     NaN     NaN     NaN     Nan
    four    oob     0.73    0.23    0.38    0.29    0.33
    four    meh     NaN     NaN     NaN     NaN     Nan

Мне удалось добиться именно этого путем воссоздания индекса и последующего вызова resutlts.reindex(index=index), но это кажется немного затянуто и требует сохранения исходных индексов в некоторой переменной. Есть ли лучший способ сделать это.

Для полноты картины я также попытался использовать concat, но я действительно наносил удар в темноте.

1 Ответ

0 голосов
/ 05 ноября 2018

.reindex все еще может работать. Нет необходимости сохранять исходные индексы, так как вы можете получить их непосредственно из results.

import pandas as pd

newidx = [results.index.levels[0],
          results.index.levels[1].append(pd.Index(data=['meh']))]

results.reindex(pd.MultiIndex.from_product(newidx, names=results.index.names))

              col1  col2  col3  col4  col5
first second                              
one   oob      1.0   1.0   1.0   1.0   1.0
      meh      NaN   NaN   NaN   NaN   NaN
two   oob      1.0   1.0   1.0   1.0   1.0
      meh      NaN   NaN   NaN   NaN   NaN
three oob      1.0   1.0   1.0   1.0   1.0
      meh      NaN   NaN   NaN   NaN   NaN
four  oob      1.0   1.0   1.0   1.0   1.0
      meh      NaN   NaN   NaN   NaN   NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...