【问题标题】:Pandas: how to add data to a MultiIndex empty DataFrame?Pandas:如何将数据添加到 MultiIndex 空 DataFrame?
【发布时间】:2018-10-10 15:48:26
【问题描述】:

我想使用 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

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

【问题讨论】:

  • 我认为在您的代码的第一块之后不好。 population 返回一个包含 5 个元组索引和 0 个列的 exmpty 数据帧,这可能不是您想要的。发布一个您希望输出的示例,也许我们可以为您提供更好的帮助。
  • 尝试使用string 代替int,所以population.loc[('optim','pareto'),('0','0')]=True
  • 不,对列使用string 没有帮助:它会导致相同的NotImplementedError

标签: python pandas dataframe multi-index


【解决方案1】:

即使我不知道为什么我的初始定义是错误的,以下内容仍按预期工作:

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

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

【讨论】:

    猜你喜欢
    • 2013-10-06
    • 2013-06-21
    • 1970-01-01
    • 2020-05-28
    • 2021-06-16
    • 1970-01-01
    • 2019-08-12
    • 2018-08-20
    相关资源
    最近更新 更多