Pandas-08-分组与聚合
1. 解释
分组与聚合通常是分析数据的一种方式,通常与一些统计函数一起使用,查看数据的分组情况。
其实交叉表与透视表也有分组的功能,所以算是分组的一种形式,只不过它们主要是计算次数或者计算比例。
要注意抛开聚合谈分组是没有意义的。
2. 分组API
- DataFrame.groupby(key, as_index=False)
- key:分组的列数据,可以多个
3. 案例:不同颜色的不同笔的价格数据
# 分组聚合:首先对数据进行,然后对每一组的数据进行聚合计算
data = {
'color': ['white', 'red', 'green', 'red', 'green'],
'object': ['pen', 'pencil', 'pencil', 'ashtray', 'pen'],
'price1': [5.56, 4.20, 1.30, 0.56, 2.75],
'price2': [4.75, 4.12, 1.60, 0.75, 3.15]
}
data = pd.DataFrame(data)
data
color object price1 price2
0 white pen 5.56 4.75
1 red pencil 4.20 4.12
2 green pencil 1.30 1.60
3 red ashtray 0.56 0.75
4 green pen 2.75 3.15
- 进行分组,对颜色分组,price进行聚合
# 首先,以 color 值作为分组条件,将数据集分为:white、red、green 三组
# 然后,对每一组数据的 price1 列分别计算其平均值
data.groupby(["color"])["price1"].mean()
color
green 2.025
red 2.380
white 5.560
Name: price1, dtype: float64
也可采取先获取列数据再进行分组的方式
# data['price1'] 获得 price1 这一列数据
# groupby(data['color']) 对 price1 这一列数据通过 color 进行分组:white、red、green
# 最后对每一组数据计算均值
data["price1"].groupby(data["color"]).mean()
4. 案例:星巴克各国家分布
4.1 获取数据
data = pd.read_csv("./data/starbucks/directory.csv")
data.head()

4.2 进行分组聚合
# 按照国家分组,求出每个国家的星巴克零售店数量
starbucks_count = data.groupby("Country")["Brand"].count()
starbucks_count
Country
AD 1
AE 144
AR 108
AT 18
AU 22
...
TT 3
TW 394
US 13608
VN 25
ZA 3
Name: Brand, Length: 73, dtype: int64
4.3 画图显示结果
plt.figure(figsize=(20, 8), dpi=60)
starbucks_count.plot.bar(color=["#f1c40f", "#1abc9c", "#8e44ad",
"#d35400", "#34495e", "#f39c12",
"#27ae60", "#c0392b", "#f368e0",
"#48dbfb", "#5f27cd", "#01a3a4"])
plt.show()


浙公网安备 33010602011771号