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

如何用melt/stack/unstack转换DataFrame:将列多级索引移至行索引

解决多级列索引转行子层级的问题

要实现保留原有行索引、将列多级索引的某一层转为行索引子层级的需求,正确工具是**stack()**方法(你之前误用的unstack()是反向操作,用于把行索引转成列索引)。

具体实现代码

基于你的示例,一行代码即可完成转换:

import pandas as pd
import numpy as np

# 生成原始DataFrame
names = ['mike', 'matt', 'dave']
details = ['bla', 'foo']
columns = pd.MultiIndex.from_tuples((n,d) for n in names for d in details)
index = pd.date_range(start="2022-10-30",  end="2022-11-3" ,freq="d")
have = pd.DataFrame(np.random.randint(0,100, size = (5,6)), index=index, columns=columns)

# 转换:将列的第0层(name)转为行索引的子层级
want = have.stack(level=0)

关键说明

  • stack(level=0):指定把列多级索引的第0层(对应names的层级)转成行索引的子层级,转换后行索引变为原始日期索引 + name的多级结构,列则保留details对应的层级,完全匹配你想要的want结构。
  • 如果给列多级索引设置了名称(比如names=['name', 'detail']),可以直接用层级名替换数字,可读性更强:
    columns = pd.MultiIndex.from_tuples((n,d) for n in names for d in details, names=['name', 'detail'])
    want = have.stack(level='name')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:45:49