首先,要知道以下五点:
stack
: 将数据的列“旋转”为行unstack
: 将数据的行“旋转”为列stack
和unstack
默认操作为最内层stack
和unstack
默认旋转轴的级别将会成果结果中的最低级别(最内层)stack
和unstack
为一组逆运算操作
例1:创建DataFrame,行索引名为state,列索引名为number1
2
3
4
5import pandas as pd
import numpy as np
data = pd.DataFrame(np.arange(6).reshape((2, 3)), index = pd.Index(['Ohio','Colorado'], name = 'state'),
columns = pd.Index(['one','two','three'], name = 'number'))
print(data)
例2:将DataFrame的列旋转为行,即stack操作。1
2result = data.stack()
print(result)
stack操作后将列索引number旋转为行索引,并且置于行索引的最内层(外层为索引state),也就是将旋转轴(number)的结果置于最低级别。
例3:将DataFrame的行旋转为列,即unstack操作。1
result.unstack()
第三点的意思是,unstack操作默认将内层索引number旋转为列索引。
同时,也可以指定分层级别或者索引名称来指定操作级别,下面做法同样会得到上面的结果。
1 | result.unstack(1) |
1 | result.unstack('number') |
例4:stack和unstack逆运算1
2
3
4s1 = pd.Series([0,1,2,3], index=list('abcd'))
s2 = pd.Series([4,5,6], index=list('cde'))
data2 = pd.concat([s1,s2], keys=['one','two'])
print(data2)
1 | data2.unstack().stack() |