Fer*_*ola 2 python multi-index pandas
如何将另一个级别值添加到初始化为特定值(例如无)的多重索引。很难用语言描述,最好用图形来描述,如何增加new价值水平:
df_before
a b c d
l1 l2
bar one 24 13 8 9
two 11 30 7 23
baz one 21 31 12 30
two 2 5 19 24
foo one 15 18 3 16
two 2 24 28 11
qux one 23 9 6 12
two 29 28 11 21
df_after
a b c d
l1 l2
bar one 24 13 8 9
two 11 30 7 23
new None None None None
baz one 21 31 12 30
two 2 5 19 24
new None None None None
foo one 15 18 3 16
two 2 24 28 11
new None None None None
qux one 23 9 6 12
two 29 28 11 21
new None None None None
Run Code Online (Sandbox Code Playgroud)
注意:我的 DataFrame 确实有三个级别,因此可以推广到更多级别的解决方案将不胜感激。我最好的尝试是获取旧级别的唯一值,附加新值并设置新级别,但它没有产生我想要的结果
# this is a failed attempt of what I wanted to do
new_level_values = [*list(df.index.get_level_values(2).unique()), "new"]
df.index = df.index.set_levels(levels=new_level_values, level=2)
df
Run Code Online (Sandbox Code Playgroud)
DataFrame.reindex与将新值附加到第二级一起使用并MultiIndex通过以下方式重新创建MultiIndex.from_product:
v = [*list(df.index.levels[1]), "new"]
df = df.reindex(pd.MultiIndex.from_product([df.index.levels[0],v]))
print (df)
a b c d
l1
bar one 24.0 13.0 8.0 9.0
two 11.0 30.0 7.0 23.0
new NaN NaN NaN NaN
baz one 21.0 31.0 12.0 30.0
two 2.0 5.0 19.0 24.0
new NaN NaN NaN NaN
foo one 15.0 18.0 3.0 16.0
two 2.0 24.0 28.0 11.0
new NaN NaN NaN NaN
qux one 23.0 9.0 6.0 12.0
two 29.0 28.0 11.0 21.0
new NaN NaN NaN NaN
Run Code Online (Sandbox Code Playgroud)