pandas 分组、聚合函数groupby

 分组过程如下图所示:

import numpy as np
import pandas as pd
df=pd.DataFrame({'key1':list('aabbab'),
                 'key2':list('cccddd'),
                 'value1':np.arange(1,7),
                 'value2':np.arange(7,13)})
df
   key1 key2  value1  value2
0    a    c       1       7
1    a    c       2       8
2    b    c       3       9
3    b    d       4      10
4    a    d       5      11
5    b    d       6      12
### 用key1分组后创建了一个GroupBy对象,后面函数的任何操作都是基于这个对象的,这一步没有进行运算。
df['value1'].groupby(df['key1']
<pandas.core.groupby.groupby.SeriesGroupBy object at 0x0000000008D74F60>
group=df['value1'].groupby(df['key1'])
group.mean()   ### 分组后求平均
key1
a    2.666667
b    4.333333
group.max()    ### 
<think>好的,用户想了解Pandasgroupby、agg和transform的用法及区别。首先,我需要回忆这三个函数的基本功能。 Groupby分组操作的核心,用于将数据按照某个或某些列分成不同的组。接下来是聚合函数agg,它对每个组应用一个或多个聚合函数,返回每个组的统计结果,比如求和、平均值等。而transform函数则是在保持原数据形状的同时,对每个组内的数据进行转换,比如标准化或填充缺失值。 用户可能想知道它们的具体使用方法和区别,比如输出结构、应用场景等。需要举例说明,比如使用agg会得到每组汇总后的结果,而transform返回与原数据相同行数的结果,但每个值是组内的聚合值。例如,计算每个组的平均后,transform会把该组的平均值填到每个原数据行中。 还要注意引用中的资料,比如引用[4]提到了groupby+agg的使用示例,引用[2]和[3]讨论了transform的用法。需要将这些引用内容自然地融入回答,确保正确引用来源。 可能用户的实际需求是处理分组数据后进行不同的操作,比如汇总统计或数据转换。需要区分agg和transform的不同输出形式,以及它们适用的场景。比如agg适合生成汇总报表,transform适合创建新的特征列。 最后,生成相关问题时要围绕这三个函数的应用场景、性能比较和高级用法,帮助用户深入理解。确保问题覆盖常见疑问,比如性能差异、多函数应用等。</think>以下是关于Pandas分组函数`groupby`、聚合函数`agg`和转换函数`transform`的用法及区别的详细说明: --- ### 一、groupby分组操作 `groupby`是分组操作的核心,将数据按指定列或条件划分为多个子集。 **语法示例**: ```python grouped = df.groupby("students") ``` **特点**: - 分组后生成`DataFrameGroupBy`对象,需配合聚合或转换函数使用 - 支持按单列、多列(列表形式)或自定义函数分组[^1] --- ### 二、agg:聚合操作 `agg`用于对分组后的数据执行**聚合计算**,返回每组汇总后的结果。 **语法示例**: ```python df.groupby("students").agg({"money": ["sum", "mean"]}) ``` **特点**: - 输出结果的行数等于分组数量 - 支持多列不同聚合方式(如同时计算总和、均值) - 可自定义聚合函数(如`np.sum`或`lambda`函数)[^4] **应用场景**:生成分组统计报表,如销售额分地区汇总。 --- ### 三、transform:转换操作 `transform`对分组数据执行操作后,**保持原始数据形状**,返回与原始数据相同行数的结果。 **语法示例**: ```python df["group_mean"] = df.groupby("students")["money"].transform("mean") ``` **特点**: - 输出结果与原始数据行数一致 - 常用于创建新列(如组内标准化、填充缺失值) - 必须返回与组内数据形状匹配的结果[^2][^3] **应用场景**:计算组内排名、生成组内归一化特征。 --- ### 四、三者的核心区别 | 函数 | 输出形状 | 典型用途 | 是否改变数据结构 | |----------|------------------|------------------------|-----------------------| | `groupby`| 中间对象 | 分组准备 | 不直接输出结果 | | `agg` | 分组数 × 统计量 | 生成汇总统计表 | 缩减行数 | | `transform`| 原始数据行数 | 组内特征工程 | 保持行数不变 | --- ### 五、综合示例 假设有以下数据: ```python import pandas as pd data = {"students": ["A", "A", "B", "B"], "score": [80, 90, 70, 85]} df = pd.DataFrame(data) ``` 1. **agg用法**: ```python df.groupby("students").agg({"score": ["max", "min"]}) ``` 输出: ``` score max min students A 90 80 B 85 70 ``` 2. **transform用法**: ```python df["avg_score"] = df.groupby("students")["score"].transform("mean") ``` 输出: ``` students score avg_score 0 A 80 85 1 A 90 85 2 B 70 77.5 3 B 85 77.5 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值