熊猫:如何将数据添加到MultiIndex空DataFrame?

时间:2018-10-10 15:48:26

标签: python pandas dataframe multi-index

我想使用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 我发现,如果我在创建DataFrame时定义了我的第一列,那么我正在做的事情就是可行的。特别是:

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

第一列充满了nan,我可以根据需要添加数据(也适用于新列):

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

我仍然不知道我的第一个定义出了什么问题...

1 个答案:

答案 0 :(得分:0)

即使我不知道为什么我的初始定义错误,也可以按预期进行以下操作:

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

然后可以填充该值,将值添加到当前列或新列/行中。