熊猫重新索引多索引无法正常工作

时间:2020-07-20 14:58:51

标签: python pandas

我有一个pandas({strong}版本1.0.5 )DataFrame,其MultiIndex分为两个级别,即喜欢:

mi = pd.MultiIndex.from_product((('a', 'c'), (5, 12)))
np.random.seed(123)
df = pd.DataFrame(data=np.random.rand(4, 2), index=mi, columns=['x', 'y'])

我要reindex在MultiIndex的第一级中包含键['a', 'b', 'c', 'd']。缺少的值应用np.nan填充。

对于非多重索引数据框,我只需使用df.reindex(index=['a', 'b', 'c', 'd'])重新索引。
现在使用MultiIndex ,我认为这应该可行(我还尝试了参数labelsaxisindex的所有其他组合) :

df.reindex(index=['a', 'b', 'c', 'd'], level=0)

但是相反,它似乎完全忽略了reindex方法并返回了未更改的数据帧:

             x         y
a 5   0.696469  0.286139
  12  0.226851  0.551315
c 5   0.719469  0.423106
  12  0.980764  0.684830

我可以重新索引MultiIndex的唯一方法是完全生成新的MultiIndex

df.reindex(index=pd.MultiIndex.from_product((
    ['a', 'b', 'c', 'd'], df.index.get_level_values(1).unique())))

Imho必须有一种更简单的方法来执行此操作,否则我不会在level方法的参数reindex中看到任何用处。此外,我经常有几个索引级别,这使得重新索引非常麻烦。

我错过了什么吗? 有什么主意如何直接重新编制索引而无需显式生成新的多索引?

1 个答案:

答案 0 :(得分:1)

不会出现这种行为。将 $containerConfigurator->import(SetList::CODE_QUALITY); 参数传递给 SetList::MYSQL_TO_MYSQLI 上的 levelreindex 版本 1.2.3 中似乎仍然存在问题。 github 上有一个问题涉及这个:

https://github.com/pandas-dev/pandas/issues/25460