请考虑以下DataFrame:

df1 = pd.DataFrame(np.ones((2, 2)), index=["A", "B"], columns=["foo", "bar"])
print(df1)

   foo  bar
A  1.0  1.0
B  1.0  1.0

print(df1.stack())
A  foo    1.0
   bar    1.0
B  foo    1.0
   bar    1.0

我希望堆叠此DataFrame,以使该列处于级别0而不是-1.但是,当我在参数中传递此参数时,似乎得到了相同的结果:

print(df1.stack(level=0))
A  foo    1.0
   bar    1.0
B  foo    1.0
   bar    1.0

似乎我没有正确理解Level参数是如何工作的.此外,我希望使用Level参数,而不是首先透视DataFrame,因为我在实践中处理的是多指数.

推荐答案

stacklevel参数指示应该堆叠哪个column级别,而不是其在索引中的目的地.

在这里,柱只有一个标高,因此0-1实际上是相同的柱标高.

请考虑下面的另一个示例:

df1 = pd.DataFrame(np.ones((2, 2)), index=['A', 'B'],
                   columns=pd.MultiIndex.from_tuples([('X', "foo"),
                                                      ('X', 'bar')]))
     X     
   foo  bar
A  1.0  1.0
B  1.0  1.0

df1.stack(level=0)
     bar  foo
A X  1.0  1.0
B X  1.0  1.0

df1.stack(level=-1)
         X
A bar  1.0
  foo  1.0
B bar  1.0
  foo  1.0

您可能正在寻找swaplevel/reorder_levels:

df1.stack().swaplevel()
# or
df1.stack().reorder_levels([1, 0])

foo  A    1.0
bar  A    1.0
foo  B    1.0
bar  B    1.0
dtype: float64

Python相关问答推荐

从不规则形状区域返回使用openCV跟踪的对象的着陆位置

Inquirer库不适用于Pyterfly

使用子字符串动态更新Python DataFrame中的列

为什么使用SciPy中的Distance. cos函数比直接执行其Python代码更快?

情节生成的饼图文本超出页面边界

Odoo onchange for invoice_Status of sale事件.订单未触发

强制venv在bin而不是收件箱文件夹中创建虚拟环境

查找下一个值=实际值加上使用极点的50%

Python json.转储包含一些UTF-8字符的二元组,要么失败,要么转换它们.我希望编码字符按原样保留

ModuleNotFound错误:没有名为Crypto Windows 11、Python 3.11.6的模块

运行总计基于多列pandas的分组和总和

从numpy数组和参数创建收件箱

将图像拖到另一个图像

log 1 p numpy的意外行为

DataFrames与NaN的条件乘法

我对我应该做什么以及我如何做感到困惑'

pandas:排序多级列

为一个组的每个子组绘制,

可以bcrypts AES—256 GCM加密损坏ZIP文件吗?

处理具有多个独立头的CSV文件