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

Sco*_*y1- 5 python pandas

我有一个pandas版本 1.0.5DataFrameMultiIndex两个级别的 a,例如:

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'])
Run Code Online (Sandbox Code Playgroud)

我想在 MultiIndexreindex第一级包含键['a', 'b', 'c', 'd']。缺失的值应该用np.nan.

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

df.reindex(index=['a', 'b', 'c', 'd'], level=0)
Run Code Online (Sandbox Code Playgroud)

但相反,它似乎完全忽略了该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
Run Code Online (Sandbox Code Playgroud)

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

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

恕我直言,必须有一种更简单的方法来做到这一点,否则我看不到levelreindex方法的参数有任何用处。此外,我经常有几个索引级别,这使得重新索引非常麻烦。

我错过了什么吗?知道如何直接重新索引而不必显式生成新的多索引吗?

gof*_*onx 3

这种行为不是预期的。在 1.2.3 版本中,将level参数传递reindex给 aMultiIndex似乎仍然被破坏pandas。github上有一个问题涉及这个:

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