首頁 > 軟體

Python+Pandas實現資料透視表

2022-06-16 18:02:04

大家好,我是丁小杰。

對於資料透視表,相信對於 Excel 比較熟悉的小夥伴都知道如何使用它,並瞭解它的強大之處,而在pandas中要實現資料透視就要用到pivot_table了。

匯入範例資料

首先匯入演示的資料集。

import pandas as pd

df = pd.read_csv('銷售目標.csv')
df.head()

引數說明

主要引數:

  • data:待操作的 DataFrame
  • values:被聚合操作的列,可選項
  • index:行分組鍵,作為結果 DataFrame 的行索引
  • columns:列分組鍵,作為結果 DataFrame 的列索引
  • aggfunc:聚合函數/函數列表,預設 numpy.mean 這裡要注意如果 aggfunc 中存在函數列表,則返回的 DataFrame 中會顯示函數名稱
  • fill_value:預設 None,可設定預設值
  • dropna:預設 True,如果列的所有值都是 NaN,將被刪除;False 則保留
  • margins:預設 False,設定為 True 可以新增行/列的總計
  • margins_name:預設顯示 'ALL',當 margins = True 時,可以設定 margins  行/列的名稱

常用操作

使用pivot_table時必須要指定index,因為計算時要根據index進行聚合。

pd.pivot_table(df.head(20),
               index='訂單日期',
               aggfunc=np.sum)

通過指定value來選擇被聚合的列。

pd.pivot_table(df.head(20),
               values='銷售目標',
               index='訂單日期',
               aggfunc=np.sum)

當只指定index進行聚合時,其實用groupby可以實現同樣的效果。

df.head(20).groupby(['訂單日期'])['銷售目標'].sum().reset_index()

新增columns引數,對列分組。

pd.pivot_table(df.head(10),
               values='銷售目標',
               index=['訂單日期', '類別'],
               columns='細分',
               aggfunc=np.sum)

對於上面結果中的空值,使用fill_value引數統一填充為0

pd.pivot_table(df.head(10),
               values='銷售目標',
               index=['訂單日期', '類別'],
               columns=['細分'],
               aggfunc=np.sum,
               fill_value=0)

現在按年份來統計銷售資料,注意此時的aggfunc引數,當引數值包含列表時,在結果DataFrame中就會顯示函數名稱。

pd.pivot_table(df,
               values='銷售目標',
               index=['年份', '類別'],
               columns='細分',
               aggfunc=[np.sum])

如果需要新增合計列,只需指定margins=True即可,同時根據需要指定合計名稱。

pd.pivot_table(df,
               values='銷售目標',
               index=['年份', '類別'],
               columns='細分',
               aggfunc=np.sum,
               margins=True,
              margins_name='合計')

當然與groupby類似,對於計算函數我們可以同時指定多種方式。

pd.pivot_table(df,
               values='銷售目標',
               index=['年份', '類別'],
               columns=['細分'],
               aggfunc={'銷售目標': [max, np.sum]},
               fill_value=0)

到此這篇關於Python+Pandas實現資料透視表的文章就介紹到這了,更多相關Python 資料透視表內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com