iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
AI & Data

資料三十-那些最基本的資料處理與分析技能系列 第 13

【Day13-計數】如何快速統計資料出現頻率?——使用Counter或groupby快速計算元素出現個數

當拿到資料之後,我通常的第一步一定是先看一下這筆資料大致長什麼樣子
這個時候有了能統計每個類別出現了幾次的部分就會很有用
而具體要針對一個或多個欄位的統計則是根據需求會有不同的應用情況

Counter-快速統計元素個數的神器

Counter是在colletions裡面的一個函數,可以用來計算任何可迭代容器(list, string)內的元素個數

統計list內元素次數

from collections import Counter
A = ["Alice", "Bob", "Bob", "Bob", "Carol"]
Counter(A)

輸出:

Counter({'Alice': 1, 'Bob': 3, 'Carol': 1})

Counter類型可以當作dict來呼叫

from collections import Counter
A = ["Alice", "Bob", "Bob", "Bob", "Carol"]
count_A = Counter(A)
print("Bob:", count_A["Bob"])
print("Amy:", count_A["Amy"]) # 不存在的key會回傳0而非跳error

輸出:

Bob: 3
Amy: 0

統計str內各字元次數

B = "Aaaaaa~"
Counter(B)

輸出:

Counter({'A': 1, 'a': 5, '~': 1})

統計DataFrame內元素個數

這邊以UCI cars資料集為例

import pandas as pd
df = pd.read_csv("car.csv")

count_class = Counter(df["class"])
count_class

輸出:

Counter({'unacc': 1210, 'acc': 384, 'vgood': 65, 'good': 69})

如何用出現次數再產生一個DataFrame表格

可以使用from_dict()的方法產生

df2 = pd.DataFrame.from_dict(count_class,orient='index',columns=["Count"])
df2

輸出:

因為Counter可以當作dict處理,直接分別取出keys和values

df2 = pd.DataFrame({"class":count_class.keys(),
                    "count": count_class.values()})
df2

輸出:

統計多欄組合出現頻率——使用groupby和size

在需要統計多個欄位的時候,我們就不能用Counter了
這邊就介紹另一種方法,先利用DataFrame的groupby的方式把所需的欄位給組合起來再計數就可以得到多欄位的統計結果了

df.groupby(["class", "safety"]).size().reset_index(name="次數")

輸出:

其實這個也可以用在單一欄位,只是我習慣上用Counter寫起來呼叫一個東西而已比較直觀

參考資料


上一篇
【Day12-排序】淺談python中的資料排序——sort, sorted, natsort, pd.sort_values
下一篇
【Day14-字串】淺談python中最常用到的str處理方式——格式化、尋找、取代、分割、合併
系列文
資料三十-那些最基本的資料處理與分析技能30

尚未有邦友留言

立即登入留言