import numpy as np
import pandas as pd
将行索引旋转为列索引,完成层级索引。
下面例子中,先创建一盒5 × 2 的DataFrame。
然后对它进行stack,于是原来的行索引变成了外层索引,原来的列索引变成了内层索引了。
df_obj = pd.DataFrame(np.random.randint(0,10, (5,2)), columns=['data1', 'data2'])
print df_obj
data1 data2
0 9 0
1 7 4
2 6 1
3 2 7
4 9 1
stacked = df_obj.stack()
print stacked
0 data1 9
data2 0
1 data1 7
data2 4
2 data1 6
data2 1
3 data1 2
data2 7
4 data1 9
data2 1
dtype: int64
打印重构之后的数据类型,发现已经从DataFrame转变为了Series类型了。
打印新数据的Index的类型,发现索引的格式变成了多层索引了。
print type(stacked)
print type(stacked.index)
unstack会默认多层索引的series转变为DataFrame,默认情况下是对内索引进行操作,即将内所有转变为DataFrame的列索引。
也可以指定操作的索引级别。lavel=0表示操作外层索引。
# 默认操作内层索引
print stacked.unstack()
data1 data2
0 9 0
1 7 4
2 6 1
3 2 7
4 9 1
# 通过level指定操作索引的级别
print stacked.unstack(level=0)
0 1 2 3 4
data1 9 7 6 2 9
data2 0 4 1 7 1