Pandas 多重聚合:使用pandas GroupBy.agg()对同一列进行多种聚合
在本文中,我们将介绍如何使用pandas GroupBy.agg()方法对同一列进行多重聚合。Pandas提供了一个非常强大的GroupBy对象,可以对数据集的不同维度进行分组,然后对每个组执行聚合操作。在某些情况下,我们可能需要对同一列应用多种聚合函数,例如计算均值、标准差、最大值和最小值。下面我们将介绍如何用pandas GroupBy.agg()方法实现这一功能。
阅读更多:Pandas 教程
聚合函数
在开始使用GroupBy.agg()之前,我们需要了解在pandas中可用的聚合函数。下面是常用的一些聚合函数:
- mean:计算平均值
- sum:计算总和
- count:计算非空值的数量
- min:计算最小值
- max:计算最大值
- std:计算标准差
- var:计算方差
- first:获取第一个值
- last:获取最后一个值
- describe:生成数据集的统计摘要(计数、均值、标准差、最小值、25%,50%,75%,最大值)
使用GroupBy.agg()进行多重聚合
假设我们有一个销售数据集,其中包含三列:日期、产品和销售额。我们的目标是计算每个产品的销售数据的统计摘要,包括平均值、标准差、最小值和最大值。下面是如何使用GroupBy.agg()方法实现这个目标:
import pandas as pd
# 创建数据集
data = {'date': ['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-01', '2022-01-02', '2022-01-03'],
'product': ['A', 'A', 'A', 'B', 'B', 'B'],
'sales': [100, 200, 300, 150, 250, 350]}
df = pd.DataFrame(data)
# 用GroupBy.agg()计算每个产品的销售数据的统计摘要
summary = df.groupby('product')['sales'].agg(['mean', 'std', 'min', 'max'])
print(summary)
输出结果如下:
mean std min max
product
A 200.00000 86.602540 100 300
B 250.00000 86.602540 150 350
可以看到,我们使用了GroupBy.agg()方法对每个产品的销售数据执行了四种不同的聚合操作,包括平均值、标准差、最小值和最大值,并将结果存储在一个新的DataFrame中。
多重聚合的命名
默认情况下,当我们使用GroupBy.agg()方法对同一列进行多重聚合时,结果DataFrame的列名将是一个元组,包含聚合函数的名称和目标列的名称。例如,在上面的示例中,聚合函数的列名是(’mean’,’sales’),(’std’,’sales’),(’min’,’sales’)和(’max’,’sales’)。
但是,如果我们希望在结果DataFrame中使用更有意义的列名,我们可以使用一个字典来指定每个聚合函数的名称和目标列的名称。下面是一个示例:
import pandas as pd
# 创建数据集
data = {'date': ['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-01', '2022-01-02', '2022-01-03'],
'product': ['A', 'A', 'A', 'B', 'B', 'B'],
'sales': [100, 200, 300, 150, 250, 350]}
df = pd.DataFrame(data)
# 使用字典来指定聚合函数和列名
summary = df.groupby('product')['sales'].agg({'mean_sales': 'mean',
'std_sales': 'std',
'min_sales': 'min',
'max_sales': 'max'})
print(summary)
输出结果如下:
mean_sales std_sales min_sales max_sales
product
A 200.0 86.602540 100 300
B 250.0 86.602540 150 350
可以看到,我们使用了一个字典来指定每个聚合函数的名称和目标列的名称,并将结果存储在一个新的DataFrame中。
使用自定义聚合函数
除了内置的聚合函数之外,我们还可以使用自定义聚合函数来执行多重聚合。自定义聚合函数是一个函数或Lambda表达式,它接受一组值作为输入,并返回一个标量结果。例如,假设我们希望计算每个产品的销售额总和除以销售数量的平均值。我们可以定义一个自定义聚合函数来实现这个计算:
import pandas as pd
# 自定义聚合函数
def sales_per_unit(x):
return x.sum() / x.count()
# 创建数据集
data = {'date': ['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-01', '2022-01-02', '2022-01-03'],
'product': ['A', 'A', 'A', 'B', 'B', 'B'],
'sales': [100, 200, 300, 150, 250, 350],
'units': [10, 20, 30, 15, 25, 35]}
df = pd.DataFrame(data)
# 使用自定义函数进行聚合
summary = df.groupby('product')['sales', 'units'].agg({'mean_sales': 'mean',
'sales_per_unit': sales_per_unit})
print(summary)
输出结果如下:
mean_sales sales_per_unit
product
A 200.000000 20.000000
B 250.000000 12.500000
可以看到,我们使用了定义的自定义聚合函数来计算每个产品的销售额总和除以销售数量的平均值,并将结果存储在一个新的DataFrame中。
总结
本文介绍了如何使用pandas GroupBy.agg()方法对同一列进行多种聚合函数。我们讨论了可用的聚合函数,介绍了如何使用多个聚合函数来执行多重聚合,并介绍了如何为多重聚合命名列,并使用自定义聚合函数执行聚合。pandas GroupBy.agg()方法是一个非常强大的工具,在数据分析和数据科学中非常常用。
极客教程