本篇文章同步發布於 使用 Python pandas 的 groupby 實現類似 Excel 樞紐分析的功能【Python 處理 Excel #15】
groupby
方法是 Python pandas 中我最喜歡的一種方法,它讓使用者可以根據一個或多個欄位分組 DataFrame 資料,並且在分組同時也能夠搭配聚合函數對特定欄位進行統計分析得到最大值、最小值、平均值等結果,因此我常用 groupby
方法取代一些 Excel 樞紐分析操作。這篇文章介紹 Python pandas 的 groupby
方法。
根據 Python pandas 的官方文件說明,groupby
方法涉及以下三種操作的組合:
這些操作使得 groupby
方法在數據分析非常實用,特別是在需要對不同類別的數據進行比較和統計。例如,可以用來計算每位客戶的訂單總數量或每個產品類別的平均價格。
聚合函數 (aggregate function) 用於將多個值歸納在一起,生成一個單一的值,例如總和、平均值、計數、最小值和最大值等統計數據。在 Python pandas 中,聚合函數可以在 groupby
方法後應用,以便對每個組別進行統計分析。
pandas 提供多種內建的聚合函數,包括:
count()
:計算每個組別的數量。sum()
:計算每個組別的總和。mean()
:計算每個組別的平均值。min()
:回傳每個組別的最小值。max()
:回傳每個組別的最大值。std()
:計算每個組別的標準差。example.xlsx 中有公司的訂單資料,部分資料如下:
order_id | create_date | customer_name | product_name | order_quantity | unit_price |
---|---|---|---|---|---|
10000 | 2024/6/5 | Amy Chen | Laptop Pro | 45 | 1000 |
10001 | 2024/6/6 | Grace Liu | Laptop Pro | 165 | 1050 |
10002 | 2024/6/13 | Ivy Yang | Gaming Desktop | 265 | 1200 |
10003 | 2024/6/15 | David Lee | Laptop Pro | 120 | 1000 |
10004 | 2024/6/16 | Amy Chen | Laptop Pro | 115 | 950 |
10005 | 2024/6/21 | Amy Chen | Gaming Desktop | 60 | 1200 |
這個案例希望計算每位客戶的訂單總數量和平均單價。
下方程式碼使用 Python pandas 的 groupby
方法算每位客戶的訂單總數量和平均單價:
import pandas as pd
# 讀取資料
df = pd.read_excel('example.xlsx')
# 使用 groupby 計算每位客戶的訂單總數量和平均單價
grouped = df.groupby(by='customer_name').agg({
'order_quantity': 'sum', # 計算每位客戶的訂單總數量
'unit_price': 'mean' # 計算每位客戶的平均單價
})
# 顯示結果
print(grouped)
customer_name
欄位的值進行分組。order_quantity
欄位使用 sum
計算總和,對 unit_price
欄位使用 mean
計算平均值。groupby
操作中,可以用字串形式或函數形式指定聚合函數。當聚合函數以字串形式表示時 (例如 'mean'
),這是因為 pandas 需要在其內部尋找對應的函數執行聚合操作。groupby
方法用於將數據按照指定的欄位進行分組,形成一個 DataFrameGroupBy
或 SeriesGroupBy
物件。這個物件包含了分組資訊,但沒有進行聚合計算。 而 agg
方法則是在 groupby
方法的基礎上,對每個分組應用聚合函數,進而計算出每個分組的聚合結果。
groupby
方法適合用於數據分組和針對分組產生統計數據。agg
方法定義對每個分組的計算方式。本篇文章同步發布於 使用 Python pandas 的 groupby 實現類似 Excel 樞紐分析的功能【Python 處理 Excel #15】