📖 知识点
1. value_counts () 统计频次
统计某列每个 "取值" 出现的次数:
# 统计"菜系"列每个菜系出现几次
df["菜系"].value_counts()
运行输出:
川菜 2
鲁菜 2
粤菜 2
Name: 菜系, dtype: int64
2. 算占比(归一化)
加 normalize=True,返回每个取值所占比例(总和为 1):
# 统计占比(0~1的小数)
df["菜系"].value_counts(normalize=True)
运行输出:
川菜 0.333333
鲁菜 0.333333
粤菜 0.333333
Name: 菜系, dtype: float64
3. 常用参数
| 参数 | 作用 |
|---|---|
normalize=True | 返回占比(比例) |
ascending=True | 按频次升序(默认降序) |
.sort_values() | 进一步排序 |
💡 理解
value_counts()默认按频次降序排列(出现最多的排最前)normalize=True把次数变成比例,方便看占比- 适合统计:分类字段的分布(地区、类型、状态等)
⚠️ 易错提醒
value_counts()通常作用于单个列(Series),df["列"].value_counts()normalize=True返回的是占比小数,不是次数- 空值默认会被忽略,不参与计数
⚔️ Kata 实战任务
任务需求:
- 导入 pandas,创建一份数据(菜系、好评与否等分类列)
- 用
df["菜系"].value_counts()统计每个菜系出现次数 - 用
normalize=True统计占比 - 打印结果,理解频次和占比
参考代码
import pandas as pd
data = {
"菜系": ["川菜", "鲁菜", "川菜", "粤菜", "鲁菜", "川菜"],
"菜名": ["麻婆豆腐", "葱爆羊肉", "回锅肉", "白切鸡", "糖醋鱼", "水煮鱼"],
}
df = pd.DataFrame(data)
# 计数量盘:统计菜系频次
print("===== 各菜系出现次数(降序)=====")
print(df["菜系"].value_counts())
print("\n===== 各菜系占比 =====")
print(df["菜系"].value_counts(normalize=True))
运行输出:
===== 各菜系出现次数(降序)====="
川菜 3
鲁菜 2
粤菜 1
Name: 菜系, dtype: int64
===== 各菜系占比 =====
川菜 0.500000
鲁菜 0.333333
粤菜 0.166667
Name: 菜系, dtype: float64
💡 观察:川菜出现 3 次、占一半 (0.5),鲁菜 2 次、粤菜 1 次。
value_counts自动按次数降序排列,一眼看出哪个菜系最多。占比则直观给出 "各占几成"。
🧠 思考题
value_counts()默认按什么顺序排列?想从少到多看要加什么参数?normalize=True返回的值加起来约等于多少?它和次数有什么关系?