You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas stack方法level参数使用困惑:如何让列处于level 0

pandas stack()方法level参数详解与MultiIndex场景实现

单层级列索引场景的问题原因

你的示例中列是单层索引,stack()默认堆叠最内层列索引(因为只有一层,所以level=-1和level=0指向同一个层级),因此两种调用结果完全一致。堆叠后的行索引结构为[原行索引, 列名],列名处于行索引的第1层(即level=-1)。

level参数的核心作用(MultiIndex场景)

level参数仅在**多层列索引(MultiIndex Columns)**下体现价值:它用来指定将哪一层列索引“移动”到行索引的层级中。以下通过实际MultiIndex示例演示如何实现你的需求:

1. 创建多层列索引DataFrame

import pandas as pd
import numpy as np

df_multi = pd.DataFrame(
    np.ones((2, 4)),
    index=["A", "B"],
    columns=pd.MultiIndex.from_tuples(
        [("X", "foo"), ("X", "bar"), ("Y", "foo"), ("Y", "bar")],
        names=["col_level0", "col_level1"]
    )
)
print(df_multi)

输出:

col_level0    X         Y     
col_level1  foo bar  foo bar
A      1.0 1.0  1.0 1.0
B      1.0 1.0  1.0 1.0

2. 默认堆叠最内层列索引(col_level1)

print(df_multi.stack())

输出(行索引层级:[原行索引, col_level1]):

col_level0    X     Y
A col_level1
foo     1.0  1.0
bar     1.0  1.0
B col_level1
foo     1.0  1.0
bar     1.0  1.0

3. 指定堆叠col_level0到行索引

通过level=0(或层级名"col_level0")指定堆叠外层列索引:

stacked = df_multi.stack(level=0)
print(stacked)

输出(行索引层级:[原行索引, col_level0]):

col_level1    foo bar
A col_level0
X        1.0 1.0
Y        1.0 1.0
B col_level0
X        1.0 1.0
Y        1.0 1.0

4. 将堆叠后的列层级设为行索引level 0

如果需要让col_level0处于行索引的最外层(level 0),可结合swaplevel()交换行索引层级:

final_result = stacked.swaplevel(0, 1).sort_index()
print(final_result)

输出:

col_level1    foo bar
col_level0 A
X        1.0 1.0
Y        1.0 1.0
col_level0 B
X        1.0 1.0
Y        1.0 1.0

总结

  • 单层级列索引下,level参数无实际效果,因为只有一个层级可选;
  • MultiIndex列场景中,level参数用来选择堆叠哪一层列索引到行索引;
  • 若要让堆叠后的列层级成为行索引的level 0,可在stack()后调用swaplevel()调整层级顺序,无需转置DataFrame。

内容的提问来源于stack exchange,提问作者BdB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 12:35:19