第一章 分组与聚合基础
1.1 什么是分组聚合?
分组聚合是数据分析中的核心操作,它允许我们按特定类别对数据进行分组,然后对每个组进行统计计算。
- 分组(Group):按一个或多个列的唯一值将数据分组
- 聚合(Aggregation):对每个分组进行统计计算(求和、平均、计数等)
- 透视表(Pivot):创建交叉表来展示多维聚合结果
💡 分组聚合是SQL中GROUP BY的Pandas实现,但更强大、更灵活。
1.2 基本分组操作
让我们学习使用groupby进行分组:
import pandas as pd
import numpy as np
data = {
'category': ['电子产品', '服装', '电子产品', '服装', '食品'],
'price': [1000, 200, 1500, 300, 50],
'quantity': [5, 10, 8, 15]
}
df = pd.DataFrame(data)
print('原始数据:')
print(df)
💻 在线代码编辑器
输入 Python 代码后点击运行按钮执行
第二章 聚合函数
2.1 常用聚合函数
Pandas提供了丰富的聚合函数供我们使用:
# 单个聚合函数
df.groupby('category').mean()
# 多个聚合函数
df.groupby('category').agg(['mean', 'sum', 'max', 'min', 'std'])
# 不同列应用不同聚合
agg_dict = {
'price': ['mean', 'sum', 'max'],
'quantity': ['sum', 'count']
}
df.groupby('category').agg(agg_dict)
2.2 自定义聚合函数
除了内置函数,我们还可以定义自己的聚合函数:
def range_func(x):
return x.max() - x.min()
df.groupby('category').agg({
'price': ['mean', range_func],
'quantity': ['sum', 'count']
})
第三章 多维度分组
3.1 多列分组
可以按多个列进行分组来获得更细粒度的分析:
data = {
'category': ['电子产品', '电子产品', '服装', '服装', '服装'],
'region': ['华东', '华北', '华东', '华北', '华南'],
'price': [1000, 1500, 200, 300, 250],
'quantity': [5, 8, 10, 15, 12]
}
df = pd.DataFrame(data)
# 按类别和地区分组
df.groupby(['category', 'region']).sum()
3.2 透视表和交叉表
使用pivot_table创建美观的透视表:
# 透视表
pd.pivot_table(df,
values='price',
index='category',
columns='region',
aggfunc='mean',
fill_value=0)
# 交叉表 - 计数
pd.crosstab(df['category'], df['region'])
第四章 分组后的操作
4.1 transform 方法
transform允许我们保持原始数据的形状:
# 计算每个类别的占比
df['category_total'] = df.groupby('category')['price'].transform('sum')
df['price_ratio'] = df['price'] / df['category_total']
4.2 apply 方法
apply可以对每个分组应用任意函数:
def top_items(group, n=2):
return group.nlargest(n, 'price')
df.groupby('category').apply(top_items)
练习题(共5题)
练习 1:基本分组
按类别分组并计算销售额总和。
练习 2:多个聚合
对同一列同时计算多个聚合指标。
练习 3:多列分组
按类别和地区两列进行分组分析。
练习 4:不同列不同聚合
对不同列应用不同的聚合函数。
练习 5:透视表
创建透视表展示数据。
测试题(共 5 题,满分 100 分)
问题 1 / 5
groupby操作返回的是什么类型的对象?
问题 2 / 5
想要保持原始数据形状的分组操作,应该使用?
问题 3 / 5
count和size在groupby中的区别是?
问题 4 / 5
关于pivot_table说法正确的是?
问题 5 / 5
对分组应用复杂操作时,最灵活的方法是?
作业提交
📝 分组聚合分析作业
请完成以下分组聚合任务:
- 1. 创建一个包含类别、地区、价格和数量的DataFrame
- 2. 按类别分组计算价格总和和数量平均值
- 3. 按类别和地区两列进行分组分析
- 4. 创建一个透视表展示数据
💻 作业代码提交