Pandas 基礎(12) - Stack 和 Unstack


這節的主題是 stack 和 unstack, 我目前還不知道專業領域是怎么翻譯的, 我自己理解的意思就是"組成堆"和"解除堆". 其實, 也是對數據格式的一種轉變方式, 單從字面上可能比較難理解, 所以給大家下面兩張圖來理解一下:


上圖中, 標綠色的部分, 代表一個對應關系, 就是列的級別轉為行級別. 
下面來看下具體實現. 首先引入文件, 通過原表, 我們可以看到有兩行表頭, 所以這里要多加個參數 header=[0,1]:

df = pd.read_excel('/Users/rachel/Sites/pandas/py/pandas/12_stack/stocks.xlsx', header=[0,1]) 

輸出:

用 stack() 方法改變一下格式, 看會是什么效果:

df_stacked = df.stack() df_stacked 

從輸出可以看到, 原來的數據結構是有兩行表頭, 經過 stack 之后, 就變成一行了, 也就是 Facebook Google Microsoft 這一行, 從原來的列名, 變成了索引:

那我們現在再 unstack 看看:

df_stacked.unstack() 

輸出:


發現, unstack 之后, 整個數據結構又變回去了.

那我們現在再來重新 stack 一下, 並且加個參數 level=0, 也就是將第一行的表頭堆疊成索引列:

df.stack(level=0) 

輸出:

下面再來看一個更復雜點的例子, 這個表格中有三行表頭:

df2 = pd.read_excel('/Users/rachel/Sites/pandas/py/pandas/12_stack/stocks_3_levels.xlsx', header=[0,1,2]) 

輸出:



首先 stack 一下:

df2.stack() 

輸出, 我們看到最下面一行表頭被堆疊到索引列了:

再試一下將 level 參數設為 0:

df2.stack(level=0) 

發現, 第一行表頭被 stack 了:

再設置 level=1:

df2.stack(level=1) 

輸出, 這次是第二行表頭被 stack 了:

再試下設置 level=2:

df2.stack(level=2) 

輸出, 發現是第三行表頭被 stack 了:

綜上, 可以總結, stack 的作用就是可以將橫向的表頭(列名)轉成縱向的索引列展示, 對於多行表頭而言, 具體要轉換哪一行取決於 level 參數, 如果不指定, 則默認轉換最下面一行表頭. 

以上, 就是關於 stack 和 unstack 的基本操作了, enjoy!~~~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM