说明
两种数据结构,一种表格“行列都有index”, 一种花括号“只有列有index”
| store1 | store2 | store3 | |
|---|---|---|---|
| street1 | 1 | 2 | 3 |
| street2 | 4 | 5 | 6 |

其实,应用stack和unstack只需要记住下面的知识点即可:
- stack: 将数据从”表格结构“变成”花括号结构“,即将其列索引变成行索引。
- unstack: 数据从”花括号结构“变成”表格结构“,即要将其中一层的行索引变成列索引。如果是多层索引,则以上函数是针对内层索引(这里是store)。利用level可以选择具体哪层索引。
例子
输出结果为 ```import numpy as npimport pandas as pdfrom pandas import Series,DataFramedata=DataFrame(np.arange(12).reshape((3,4)),index=pd.Index(['street1','street2','street3']),columns=pd.Index(['store1','store2','store3','store4']))print(data)print('-----------------------------------------\n')data2=data.stack()data3=data2.unstack()print(data2)print('-----------------------------------------\n')print(data3)
street1 0 1 2 3 street2 4 5 6 7 street3 8 9 10 11store1 store2 store3 store4
street1 store1 0 store2 1 store3 2 store4 3 street2 store1 4 store2 5 store3 6 store4 7 street3 store1 8 store2 9 store3 10 store4 11
dtype: int32
store1 store2 store3 store4
street1 0 1 2 3 street2 4 5 6 7 street3 8 9 10 11
结论:使用stack函数,将data的列索引['store1','store2','store3’,'store4']转变成行索引(第二层),便得到了一个层次化的Series(data2),使用unstack函数,将data2的第二层行索引转变成列索引(默认内层索引,level=-1),便又得到了DataFrame(data3)。<a name="x5kGV"></a>## 应用<a name="Fr2hb"></a>#### 行列互换还是刚刚的数据data
store1 store2 store3 store4
street1 0 1 2 3 street2 4 5 6 7 street3 8 9 10 11
通过stack将“表格数据”转换为“花括号数据”,即只有列方向索引
data2 = data.stack()
street1 store1 0 store2 1 store3 2 store4 3 street2 store1 4 store2 5 store3 6 store4 7 street3 store1 8 store2 9 store3 10 store4 11 dtype: int32
unstack重新堆叠数据,将原行索引(level=0)做为level
data2.unstack(level=0)
street1 street2 street3
store1 0 4 8 store2 1 5 9 store3 2 6 10 store4 3 7 11 ```
