利用Pandas的`groupby`和`agg`函数进行多维度数据聚合分析及自定义聚合函数实战
引言
一、Pandas的groupby函数基础
1.1 基本分组操作
1.2 多列分组
二、Pandas的agg函数基础
2.1 基本聚合操作
2.2 对不同列应用不同聚合函数
三、自定义聚合函数
3.1 定义自定义聚合函数
3.2 将自定义聚合函数应用于多列
四、实际案例:电商销售数据分析
4.1 按产品类别和地区分组,计算总销售额和总销售数量
4.2 按月份分组,计算销售额的平均值和标准差
4.3 自定义聚合函数:计算销售额的百分位数
五、总结
六、进一步学习建议
引言
在数据分析和处理中,Pandas库是Python中最常用的工具之一。其强大的数据处理能力,尤其是在数据聚合分析方面,能够帮助我们快速从大量数据中提取有价值的信息。本文将详细介绍如何利用Pandas的groupby
和agg
函数进行多维度数据聚合分析,并通过实际案例展示如何自定义聚合函数,以满足更复杂的数据统计需求。
一、Pandas的groupby
函数基础
groupby
是Pandas中用于分组操作的核心函数。它允许我们根据某些列的值将数据集分成多个组,然后对每个组进行聚合操作。基本语法如下:
df.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False, **kwargs)
1.1 基本分组操作
假设我们有一个销售数据集,包含产品类别、销售日期、销售额等信息。我们可以通过groupby
函数按照产品类别进行分组,然后计算每个类别的总销售额:
import pandas as pd # 示例数据 data = { 'Category': ['A', 'B', 'A', 'B', 'A', 'B'], 'Sales': [100, 200, 150, 250, 300, 350] } df = pd.DataFrame(data) # 按Category分组并计算总销售额 grouped = df.groupby('Category')['Sales'].sum() print(grouped)
1.2 多列分组
除了单列分组,groupby
还支持多列分组。例如,我们可以同时按照产品类别和销售月份进行分组:
# 示例数据 data = { 'Category': ['A', 'B', 'A', 'B', 'A', 'B'], 'Month': ['Jan', 'Jan', 'Feb', 'Feb', 'Mar', 'Mar'], 'Sales': [100, 200, 150, 250, 300, 350] } df = pd.DataFrame(data) # 按Category和Month分组并计算总销售额 grouped = df.groupby(['Category', 'Month'])['Sales'].sum() print(grouped)
二、Pandas的agg
函数基础
agg
函数是groupby
的常用方法之一,用于对分组后的数据进行多种聚合操作。它可以同时应用多个聚合函数,并返回一个包含多种统计结果的数据框。基本语法如下:
grouped.agg(func=None, *args, **kwargs)
2.1 基本聚合操作
我们可以使用agg
函数对分组后的数据应用多种聚合函数,例如计算每个组的销售额总和、平均值、最大值等:
# 按Category分组并计算多种统计量 grouped = df.groupby('Category')['Sales'].agg(['sum', 'mean', 'max']) print(grouped)
2.2 对不同列应用不同聚合函数
agg
函数还支持对不同列应用不同的聚合函数。例如,我们可以对销售额列计算总和,对销售数量列计算平均值:
# 示例数据 data = { 'Category': ['A', 'B', 'A', 'B', 'A', 'B'], 'Sales': [100, 200, 150, 250, 300, 350], 'Quantity': [10, 20, 15, 25, 30, 35] } df = pd.DataFrame(data) # 按Category分组并对不同列应用不同聚合函数 grouped = df.groupby('Category').agg({ 'Sales': 'sum', 'Quantity': 'mean' }) print(grouped)
三、自定义聚合函数
在某些情况下,内置的聚合函数无法满足我们的需求。这时,我们可以通过自定义聚合函数来实现更复杂的统计操作。自定义聚合函数的基本步骤如下:
3.1 定义自定义聚合函数
假设我们需要计算每个组的销售额的中位数和标准差。我们可以定义一个自定义函数来实现这一需求:
def custom_agg(x): return pd.Series({ 'median': x.median(), 'std': x.std() }) # 按Category分组并应用自定义聚合函数 grouped = df.groupby('Category')['Sales'].apply(custom_agg) print(grouped)
3.2 将自定义聚合函数应用于多列
我们还可以将自定义聚合函数应用于多列。例如,我们可以对销售额和销售数量分别计算中位数和标准差:
def custom_agg(x): return pd.Series({ 'median': x.median(), 'std': x.std() }) # 按Category分组并对多列应用自定义聚合函数 grouped = df.groupby('Category').agg({ 'Sales': custom_agg, 'Quantity': custom_agg }) print(grouped)
四、实际案例:电商销售数据分析
为了更直观地展示groupby
和agg
函数的应用,我们以一个电商销售数据集为例,进行多维度的数据聚合分析。假设数据集包含以下字段:
Order ID
:订单编号Product
:产品名称Category
:产品类别Region
:销售地区Sales
:销售额Quantity
:销售数量Date
:销售日期
4.1 按产品类别和地区分组,计算总销售额和总销售数量
# 按Category和Region分组并计算总销售额和总销售数量 grouped = df.groupby(['Category', 'Region']).agg({ 'Sales': 'sum', 'Quantity': 'sum' }) print(grouped)
4.2 按月份分组,计算销售额的平均值和标准差
# 将Date列转换为日期格式 df['Date'] = pd.to_datetime(df['Date']) # 按月份分组并计算销售额的平均值和标准差 df['Month'] = df['Date'].dt.to_period('M') grouped = df.groupby('Month')['Sales'].agg(['mean', 'std']) print(grouped)
4.3 自定义聚合函数:计算销售额的百分位数
def percentile_agg(x): return pd.Series({ '25th_percentile': x.quantile(0.25), '50th_percentile': x.quantile(0.50), '75th_percentile': x.quantile(0.75) }) # 按Category分组并计算销售额的百分位数 grouped = df.groupby('Category')['Sales'].apply(percentile_agg) print(grouped)
五、总结
通过本文的介绍,我们详细讲解了如何利用Pandas的groupby
和agg
函数进行多维度数据聚合分析,并通过实际案例展示了如何自定义聚合函数以满足更复杂的数据统计需求。掌握这些技巧,可以大大提高我们在数据分析工作中的效率和灵活性。希望本文的内容能够对你在实际工作中有所帮助。
六、进一步学习建议
- 深入理解Pandas的其他高级功能:如
pivot_table
、merge
、join
等,这些功能在处理复杂数据集时非常有用。 - 学习其他数据处理库:如NumPy、Dask等,它们可以与Pandas结合使用,进一步提升数据处理能力。
- 实践项目:通过实际项目来巩固所学知识,例如分析电商数据、金融数据等,这将帮助你更好地理解和应用这些技术。