我有一个使用以下方式创建的多索引的Pandas数据框:
indices = [['one', 'two', 'three', 'four'], ['oob']]
index = pd.MultiIndex.from_product(indices, names=['first', 'second'])
results = pd.DataFrame(index=index, columns=['col1', 'col2', 'col3', 'col4', 'col5'])
... input values ...
col1 col2 col3 col4 col5
first second
one oob 0.87 0.56 0.46 0.50 0.48
two oob 0.87 0.57 0.23 0.33 0.26
three oob 0.76 0.25 0.36 0.30 0.33
four oob 0.73 0.23 0.38 0.29 0.33
我想做的是在数据框中添加一个新的级别(我相信这是正确的术语),这样它将看起来像这样:
col1 col2 col3 col4 col5
first second
one oob 0.87 0.56 0.46 0.50 0.48
one meh NaN NaN NaN NaN Nan
two oob 0.87 0.57 0.23 0.33 0.26
two meh NaN NaN NaN NaN Nan
three oob 0.76 0.25 0.36 0.30 0.33
three meh NaN NaN NaN NaN Nan
four oob 0.73 0.23 0.38 0.29 0.33
four meh NaN NaN NaN NaN Nan
我已经设法通过重新创建索引然后调用resutlts.reindex(index=index)
来实现此目的,但这似乎有点麻烦,并且需要将原始索引保存在某个变量中。有没有更好的方法可以做到这一点。
出于完整性考虑,我也尝试使用concat
,但我确实在这里被暗中刺伤。
答案 0 :(得分:2)
.reindex
仍然可以工作。无需保存原始索引,因为您可以直接从results
获取它们。
import pandas as pd
newidx = [results.index.levels[0],
results.index.levels[1].append(pd.Index(data=['meh']))]
results.reindex(pd.MultiIndex.from_product(newidx, names=results.index.names))
col1 col2 col3 col4 col5
first second
one oob 1.0 1.0 1.0 1.0 1.0
meh NaN NaN NaN NaN NaN
two oob 1.0 1.0 1.0 1.0 1.0
meh NaN NaN NaN NaN NaN
three oob 1.0 1.0 1.0 1.0 1.0
meh NaN NaN NaN NaN NaN
four oob 1.0 1.0 1.0 1.0 1.0
meh NaN NaN NaN NaN NaN