在 pandas 中,agg()
方法是一个强大的工具,用于对分组(GroupBy)后的数据应用聚合函数。这个方法可以同时对多个列应用不同的聚合函数,并且可以灵活地处理复杂的数据聚合需求。
基本用法
agg()
方法的基本语法如下:
grouped.agg(func, axis, *args, **kwargs)
grouped
:这是通过groupby()
方法创建的 GroupBy 对象。func
:这是一个函数或函数的列表,用于对分组后的数据进行聚合。axis
:指定应用聚合函数的轴向,通常在groupby()
后不需要指定。*args
和**kwargs
:传递给聚合函数的额外参数。
示例
假设我们有一个 DataFrame df
,包含以下列:'A'
, 'B'
, 'C'
。
import pandas as pd
# 创建示例 DataFrame
df = pd.DataFrame({
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar'],
'B': ['one', 'one', 'two', 'three', 'two', 'two'],
'C': [1, 2, 3, 4, 5, 6],
'D': [7, 8, 9, 5, 6, 3]
})
df
# 按 'A' 列分组,然后对 'B' 列使用 'nunique' 聚合函数
result = df.groupby('A').agg({
'B': 'nunique',
'C': 'sum',
'D': 'max'
})
print(result)
这将输出:
B C D
A
bar 2 9 8
foo 2 9 9
在这个例子中,我们按 'A'
列的值分组,然后对每个组的 'B'
列计算唯一值的数量(nunique
),对 'C'
列计算总和(sum
),以及对 'D'
列找到最大值(max
)。
使用字符串参数
agg()
方法也可以接受字符串参数,这使得代码更简洁:
# 按 'A' 列分组,并对所有列应用 'sum' 和 'max' 聚合函数
result = df.groupby('A').agg(['sum', 'max'])
result
result = df.groupby('A')[['B', 'C', 'D']].agg(['nunique', 'sum', 'max'])
result
这将产生与上面相同的结果。
使用自定义函数
你还可以在 agg()
方法中使用自定义函数:
def custom_func(x):
return x.max() - x.min()
result = df.groupby('A')[['C', 'D']].agg(custom_func)
result
这将对 'C'
和 'D'
列应用自定义函数 custom_func
,计算每个组的最大值和最小值之差。
多级聚合
agg()
方法也可以与多级分组一起使用:
result = df.groupby(['A', 'B']).agg({
'C': 'sum',
'D': 'max'
})
这将按 'A'
和 'B'
列的组合进行分组,并对每个组的 'C'
列求和,对 'D'
列求最大值。
agg()
方法的灵活性和强大的功能使其成为 pandas 中处理分组数据时不可或缺的工具。
实际案例
从用户消费次数,用户消费金额,用户购买产品数量三个维度进行探讨
customer_c = df1[df1["Quantity"] > 0].groupby("CustomerID").agg({
"InvoiceNo":"nunique",
"Quantity":"sum",
"T_Price":np.sum
})
customer_c