我有一个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
,我认为这应该可行(我还尝试了参数labels
,axis
和index
的所有其他组合) :
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
中看到任何用处。此外,我经常有几个索引级别,这使得重新索引非常麻烦。
我错过了什么吗? 有什么主意如何直接重新编制索引而无需显式生成新的多索引?
答案 0 :(得分:1)
不会出现这种行为。将 $containerConfigurator->import(SetList::CODE_QUALITY);
参数传递给 SetList::MYSQL_TO_MYSQLI
上的 level
在 reindex
版本 1.2.3 中似乎仍然存在问题。 github 上有一个问题涉及这个: