How to use Python GroupBy Data (List+Dict)

用 Python 處理資料時,對資料的某個 Key 進行 GroupBy 是很常見的需求,例如分析 Email Log 時,想知道某個標題的發送統計數,或是列出每個標題的 Email Provider 前五名之類,就會需要對標題進行 GroupBy 的動作,在資料庫裡這是十分簡單的事情,但如果你不想丟資料庫的話呢?

除了 Pandas 這套超強的資料處理函式庫可以幫你之外,其實 Python 本身也有 GroupBy 可以使用哦!

在 itertools module 裡面有 groupby 這個 method,你可以丟一個 Collection 類別的東西進去並指定 key 之後,他會把同一個 key 的資料整理成一個類似 List 的東西(但其實不是 List 哦),之後看你是要計算數量(相同標題 Email 發送數量),還是分別列出這些相同 Key 的資料(TOP 5 Email Provider By Subject)都可以。

不過在做 GroupBy 之前要先對資料進行排序,以你要處理的 Key 來排序。詳細做法就看下面的程式碼吧!(Python 3) 這邊有透過 lambda 來取得要當 Key 的欄位。

from itertools import groupby

dicts = [
 {'name': 'A', 'age': 16},
 {'name': 'B', 'age': 18},
 {'name': 'C', 'age': 17},
 {'name': 'D', 'age': 16},
 {'name': 'E', 'age': 17}
]

dicts.sort(key=lambda d : d['age'])

# Group By Age Field
for key, groups in groupby(dicts, lambda d : d['age']):
 # print(list(groups))
 # print(len(list(groups)))
 print(key)

 for item in groups:
   print(item)
 print('-----')

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料