<p>您可以创建一个以列索引为索引的数据帧,<code>data</code>是您想要添加的级别,因为<code>set_index(append=True)</code>只为行索引定义。然后给它赋值<code>df.columns = ...</code></p>
<pre><code>import pandas as pd
idx = pd.MultiIndex(levels=[['Foo', 'Bar'], ['A', 'B', 'C'], ['a']],
codes=[[0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2], [0, 0, 0, 0, 0, 0]],
names=['L1', 'L2', 'L3'])
x = [0.01, 0.01, 0.01, 0.02, 0.02, 0.02]
pd.DataFrame(x, index=idx, columns=['L4']).set_index('L4', append=True).index
#MultiIndex([('Foo', 'A', 'a', 0.01),
# ('Foo', 'B', 'a', 0.01),
# ('Foo', 'C', 'a', 0.01),
# ('Bar', 'A', 'a', 0.02),
# ('Bar', 'B', 'a', 0.02),
# ('Bar', 'C', 'a', 0.02)],
# names=['L1', 'L2', 'L3', 'L4'])
</code></pre>
<hr/>
<p>在引擎盖下<code>set_index</code>只是在追加时重新创建整个多索引,因此需要一种更实际的方法</p>
<pre><code>arrays = []
for i in range(idx.nlevels):
arrays.append(idx.get_level_values(i))
arrays.append(pd.Index(x, name='L4')) # Add the new level
new_idx = pd.MultiIndex.from_arrays(arrays)
#MultiIndex([('Foo', 'A', 'a', 0.01),
# ('Foo', 'B', 'a', 0.01),
# ('Foo', 'C', 'a', 0.01),
# ('Bar', 'A', 'a', 0.02),
# ('Bar', 'B', 'a', 0.02),
# ('Bar', 'C', 'a', 0.02)],
# names=['L1', 'L2', 'L3', 'L4'])
</code></pre>