1. 程式人生 > >【Python】pandas軸旋轉stack和unstack用法詳解

【Python】pandas軸旋轉stack和unstack用法詳解

摘要

前面給大家分享了pandas做資料合併的兩篇[pandas.merge][pandas.cancat]的用法。今天這篇主要講的是pandas的DataFrame的軸旋轉操作,stack和unstack的用法。

首先,要知道以下五點:
1.stack:將資料的列“旋轉”為行
2.unstack:將資料的行“旋轉”為列
3.stack和unstack預設操作為最內層
4.stack和unstack預設旋轉軸的級別將會成果結果中的最低級別(最內層)
5.stack和unstack為一組逆運算操作
第一點和第二點以及第五點比較好懂,可能乍看第三點和第四點會不太理解,沒關係,看看具體下面的例子,你就懂了。

  1. 建立DataFrame,行索引名為state,列索引名為number
import 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'))
data

在這裡插入圖片描述

  1. 將DataFrame的列旋轉為行,即stack操作。
result = data.stack()
result

在這裡插入圖片描述
從下圖中結果來理解上述點4,stack操作後將列索引number旋轉為行索引,並且置於行索引的最內層(外層為索引state),也就是將旋轉軸(number)的結果置於 最低級別。

  1. 將DataFrame的行旋轉為列,即unstack操作。
result.unstack()

在這裡插入圖片描述
從下面結果理解上述點3,unstack操作預設將內層索引number旋轉為列索引。
同時,也可以指定分層級別或者索引名稱來指定操作級別,下面做錯同樣會得到上面的結果。
在這裡插入圖片描述

  1. stack和unstack逆運算
s1 = 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'])
data2

在這裡插入圖片描述

data2.unstack().stack()

在這裡插入圖片描述

我們下次再見,如果還有下次的話!!!
歡迎關注微信公眾號:516資料工作室
516資料工作室