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

Pandas 0.19.2中多索引Series重排为列联表的实现方法

解决多级索引Series转列联DataFrame的问题

嘿,你完全不用纠结groupby()啦,Pandas里有个专门的方法刚好匹配你的需求——unstack(),它就是用来把多级索引中的某一级“展开”成列的,完美解决你的转换需求!

直接实现的代码

你只需要在创建好的Series s 上调用unstack(),指定要展开的索引级别(这里是second)就行:

import pandas as pd
import numpy as np

# 你的原始代码,创建多级索引Series
arrays = [[2001, 2001, 2002, 2002, 2002, 2003, 2004, 2004], ['A', 'B', 'A', 'C', 'D', 'B', 'C', 'D']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
s = pd.Series(np.random.randn(8), index=index, name='signal')

# 关键转换步骤
result = s.unstack(level='second')
print(result)

输出结果

运行后你会得到和你目标格式完全一致的DataFrame:

A     B     C     D
first                      
2001 -2.48  0.95   NaN   NaN
2002  0.55   NaN  0.65 -1.32
2003   NaN -0.25   NaN   NaN
2004   NaN   NaN  0.86 -0.31

为什么不用groupby()?

你之前尝试的groupby(level=1)是按second(也就是A/B/C/D)来分组,得到的是每个分组的聚合结果,而不是把索引转成列的结构,所以不符合你的需求。unstack()才是专门处理多级索引行列转换的工具。

额外小提示

如果你的数据中存在first和second的重复组合(比如同一个年份下同一个字母有多个值),可以通过aggfunc参数指定聚合方式,比如取平均值:

result = s.unstack('second', aggfunc='mean')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:25:42