【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写起来呼叫一个东西而已比较直观

参考资料


<<:  卡夫卡的藏书阁【Book14】- KafkaJS 生产者 - 压缩 2

>>:  Day 23: 不同的环境,不同的Driver,利用Driver 驾驭SQLDelight

【Day 8】Cloud x AWS x 李家同教授的最终归宿

tags: 铁人赛 AWS Cloud 概述 碎念时间 今天来玩玩 AWS (Amazon Web ...

[Android Studio] -- Day 2 主题变换Theme01

前言 刚好读到layout的部分,来做之前都没试过的APP色系转换。 正文 这次利用spinner来...

Day 3 设定 tsconfig.json 档

上一篇提到下了 tsc --init 指令之後会创建出一个 tsconfig.json 的档案,这个...

Day 20 - WooCommerce: 定义信用卡付款闸道

永丰金流收款 API 在目前我们从文件看到的,支援信用卡付款及虚拟帐号 ATM 付款。本次铁人赛在也...

[第五只羊] 迷雾森林建筑工事 IV 专案环境设定 READY GO

天亮了 昨晚是平安夜 关於迷雾森林故事 小狼现身请睁眼 待洛神解释完了迷雾森林的由来 知悉了 ani...