Панды: как добавить данные в MultiIndex пустой DataFrame? - PullRequest
0 голосов
/ 10 октября 2018

Я хотел бы использовать MultiIndex DataFrame для простого выбора частей DataFrame.Я создал пустой DataFrame следующим образом:

mi = mindex = {'input':['a','b','c'],'optim':['pareto','alive']}
mi = pd.MultiIndex.from_tuples([(c,k) for c in mi.keys() for k in mi[c]])
mc = pd.MultiIndex(names=['Generation','Individual'],labels=[[],[]],levels=[[],[]])
population = pd.DataFrame(index=mi,columns=mc)

, что кажется хорошим.Однако я не знаю, как вставить отдельные данные, чтобы начать заполнять мой DataFrame.Я попробовал следующее:

population.loc[('optim','pareto'),(0,0)]=True

, где я попытался определить новый двойной столбец индекса (0,0), ведущий к NotImplementedError.Я также попытался с (0,1), который дал ValueError.

Я попытался также без индексов столбцов:

population.loc[('optim','pareto')]=True

, который не дал ошибки ... но без измененийв DataFrame либо ... Любая помощь?Заранее спасибо.

РЕДАКТИРОВАТЬ Чтобы уточнить мой вопрос после заполнения, мой DataFrame должен выглядеть следующим образом:

Generation     1               2
Individual     1    2    3     4    5     6
input       a  1    1    2     ...
            b  1    2    2     ...
            c  1    1    2     ...
optim  pareto  True True False ...
        alive  True True False ...

РЕДАКТИРОВАТЬ 2 Iобнаружил, что то, что я делал, работает, если я определю свой первый столбец при создании DataFrame.В частности, с:

mc = pd.MultiIndex.from_tuples([(0,0)])

Я получаю первый столбец, заполненный nan, и могу добавлять данные, как я хотел (также для новых столбцов):

population.loc[('optim','pareto'),(0,1)]=True

Я все ещене знаю что не так с моим первым определением ...

1 Ответ

0 голосов
/ 12 октября 2018

Даже если я не знаю, почему мое первоначальное определение было неверным, следующее работает, как и ожидалось:

mi = {'input':['a','b','c'],'optim':['pareto','alive']}
mi = pd.MultiIndex.from_tuples([(c,k) for c in mi.keys() for k in mi[c]])
mc = pd.MultiIndex.from_tuples([(0,0)],names=['Generation','Individual'])
population = pd.DataFrame(index=mi,columns=mc)

Похоже, что решение было инициализировать столбцы при создании DataFrame (здесь с (0,0) столбец).Затем создается созданный DataFrame:

Generation      0
Individual      0
input a       NaN
      b       NaN
      c       NaN
optim pareto  NaN
      alive   NaN

, который затем можно заполнить, добавив значения в текущий столбец или новые столбцы / строки.

...