Pivot allows you to transform or reshape data.
Pivot 可以幫助我們改變數據的格式, 下面兩個例子可以作為參考:
下面來看下具體實現, 首先引入一個 csv 文件(已上傳)
df = pd.read_csv('/Users/rachel/Sites/pandas/py/pandas/10_pivot/weather.csv')
輸出:
格式轉換, 設置 'date' 為索引列, 也就讓'date' 做每一行的輸出依據, 然后設置'city' 為每一列輸出的依據:
df.pivot(index='date', columns='city')
還可以給出第三個參數, 指定輸出的內容:
df.pivot(index='date', columns='city', values='humidity')
下面來看下 pivot table:
pivot table is used to summarize and aggregate data inside dataframe.
pivot table 可以用來很好地總結整合數據. 下面通過一個例子來看一下:
df = pd.read_csv('/Users/rachel/Sites/pandas/py/pandas/10_pivot/weather2.csv')
輸出:
從這個輸出可以看出目前的數據結構很亂, 這時, 我們就可以用 pivot table 來做整合:
df.pivot_table(index='city', columns='date')
從結果可以看出, 這樣整合之后, 取的是每天每個城市每個事件的平均值.
對於 pivot_table() 函數, 我們還可以通過第三個參數 'aggfun' 來做很多的變化, 下面分別來看下:
取和:
df.pivot_table(index='city', columns='date', aggfunc='sum')
取數據的條數:
df.pivot_table(index='city', columns='date', aggfunc='count')
求差異:
df.pivot_table(index='city', columns='date', aggfunc='diff')
求平均值, 其實如果不加這個參數, 默認也是求平均值:
df.pivot_table(index='city', columns='date', aggfunc='mean')
橫向縱向分別求和的平均值:
df.pivot_table(index='city', columns='date', margins=True)
以上, 大家可以實際運行一下, 看看輸出的結果.
下面介紹最后一個點, 對數據進行分組整理:
首先, 還是先引入一個文件做例子:
df = pd.read_csv('/Users/rachel/Sites/pandas/py/pandas/10_pivot/weather3.csv')
輸出:
然后, 我們想實現的是把數據按照月份分組:
df.pivot_table(index=pd.Grouper(freq='M', key='date'), columns='city')
但是按照上面的代碼運行, 會報錯, 提示 'date' 列不是時間格式, 所以需要先把'date' 列的格式改成時間:
df['date'] = pd.to_datetime(df['date'])
最后輸出結果:
以上就是關於 pivot 的常用方法, enjoy~~~