Pandas之stack()和unstack()用法

学习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')

你可能感兴趣的:(学习笔记)