如何用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
相关产品推荐
相关产品推荐

