Pandas之stack()和unstack()用法

本文通过实例详细解析了Pandas中stack()与unstack()函数的工作原理及使用技巧,帮助读者理解如何通过这两个函数实现DataFrame数据的行转列转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习pandas的时候一直搞不清stack()和unstack(),看起来就是把df转了转但一直不知道具体原理。
看了【Python】pandas轴旋转stack和unstack用法详解后,觉得清楚了很多,再结合《利用python进行数据分析》的解释和例子,写下这篇博客作一个总结和思考。

stack()即“堆叠”,作用是将列旋转到行
unstack()即stack()的反操作,将行旋转到列

看个栗子:

# 创建一个df
data = pd.DataFrame(np.arange(6).reshape((2, 3)),
                    index=pd.Index(['Ohio', 'Colorado'], name='state'),
                    columns=pd.Index(['one', 'two', 'three'],
                    name='number'))

长这样:

number 	one 	two 	three
state 			
Ohio 	0 	1 	2
Colorado 	3 	4 	5

做一个列转行的旋转:

result = data.stack()
result
state     number
Ohio      one       0
          two       1
          three     2
Colorado  one       3
          two       4
          three     5
dtype: int32

原来的列数据one, two, three就到了行上来了,形成多层索引。
注意这里:stack()操作后返回的对象是Series类型

转回来:

result.unstack()
number 	one 	two 	three
state 			
Ohio 	0 	1 	2
Colorado 	3 	4 	5

这里,在多层序列中,比如刚stack()过后的result,可以用unstack()将数据重新排列后放入一个df里。
比如,还是result:

state     number
Ohio      one       0
          two       1
          three     2
Colorado  one       3
          two       4
          three     5
dtype: int32

行索引是有两级的,里层的number和外层的state。
由于stack和unstack默认是操作最里层的数据,当我们想操作外层的数据时,就要传入一个层级序号或名称来拆分一个不同的层级

result.unstack(0)

输出是:

state 	Ohio 	Colorado
number 		
one 	0 	3
two 	1 	4
three 	2 	5

换个参数:

result.unstack(1)
number 	one 	two 	three
state 			
Ohio 	0 	1 	2
Colorado 	3 	4 	5

对比两个结果,当层级序号为0时,unstack()将state行旋转到了列
当输入参数为1时,将number行旋转到了列。

如果分不清层级序号的话,参数输入层级名称也是可以的,即

result.unstack(0) = result.unstack('state')
result.unstack(1) = result.unstack('number')
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值