Loading

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()

![image-20210420110613800](/Users/qinian/Library/Application Support/typora-user-images/image-20210420110613800.png)

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()

image-20210420110848067

posted @ 2021-05-02 15:04  七年i  阅读(146)  评论(0)    收藏  举报