Pandas | agg() | 对分组(GroupBy)后的数据应用聚合函数的强大工具

在这里插入图片描述

在 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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胜天半月子

打不打商的无所谓,能帮到你就好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值