pandas里applymap、apply、map、agg、groupby、自定义函数的使用

Pandas里三种调用函数应用的方法:

                 1:apply作用于DF的列或行

                 2:applymap作用于DF的所有元素

                 3:map作用于Series的所有元素

  agg函数很多情况下都是和groupby组合使用,通常指代分组聚合,它和apply的区别不是很明显,一般当调用自定义函数,没有聚合这个概念时最好使用apply。

 

  先上代码:核心代码是25、54、58行

# -*- coding:utf-8 -*-
from datetime import datetime
import pandas as pd
#*****************
##按天口径出的phone结果
# 口径:1)关键词且官网 2)关键词且app 3)关键词访问大于1 4)官网访问大于1
#*****************
def Main():
    dataList = '/dudu/result_4G/list09.txt'
    # 对照表清单数据(加密和不加密手机号对应关系)
    mapRuletxt = '/dudu/result_4G/mapRuletxt.txt'
    targetTxt = '/dudu/result_4G/target2.txt'
    # 存储最终解果
    phoneSet = set()
    # 存储有关键词行为的phone
    kwPhoneSet = set()
    # 存储有官网行为的phone
    webPhoneSet 
<think>我们正在讨论pandas中的applygroupby函数。根据引用[1]和引用[2],apply方法用于沿DataFrame的轴(行或列)应用一个函数。而groupby方法用于分组操作(引用[3])。同时,引用[4]提到了agg(聚合)函数,它通常与groupby一起使用。用户的问题:了解applygroupby的用法及区别。我们需要解释:1.groupby:将数据分组,然后对每组应用聚合函数(如sum,mean等)或转换函数。2.apply:更通用的方法,可以沿着DataFrame的任意轴(行或列)应用一个函数,这个函数可以是聚合、转换或者更复杂的操作。区别:-groupby首先将数据分组,然后对每个组执行操作(通常结合agg,transform,apply等方法)。-apply是一个更通用的函数应用方法,可以在整个DataFrame的行或列上操作,也可以在groupby对象上使用(即groupby后接apply)。示例:我们将创建一个示例DataFrame,然后展示groupbyapply使用。注意:在groupby之后,我们通常会使用agg、transform或者apply(这applygroupby对象的方法)来操作每个分组。步骤:1.创建示例DataFrame。2.展示groupby的基本用法(结合agg)。3.展示直接使用DataFrame的apply(在行或列上)。4.展示在groupby对象上使用apply(可以实现更复杂的分组操作)。注意:引用中提到了applymapapplymapagg等方法,但这我们聚焦于applygroupby。根据引用[3]:-DataFrame.apply:沿轴应用函数。-DataFrame.groupby:分组。根据引用[4]:agg通常用于聚合,可以传入多个聚合函数。开始回答:</think>### Pandas中`apply`与`groupby`的用法及区别 #### 一、核心概念 1. **`groupby()`** 用于将数据按指定列/条件分组,形成**分组对象**(`DataFrameGroupBy`),后续需配合聚合函数(如`sum()`、`mean()`)或转换函数(如`transform()`)使用。 - **本质**:先分组,再对每个组独立处理 - **适用场景**:分类汇总、分组统计 2. **`apply()`** 沿DataFrame的**轴(行或列)** 应用自定义函数,直接返回处理后的结果。 - **本质**:遍历轴方向(行/列),逐行/列执行函数 - **适用场景**:复杂行/列级转换、跨列计算 --- #### 二、用法示例 ##### 示例数据集 ```python import pandas as pd data = { 'Category': ['A', 'B', 'A', 'B', 'A'], 'Value': [10, 15, 20, 25, 30], 'Weight': [1.2, 0.8, 1.5, 0.9, 1.0] } df = pd.DataFrame(data) ``` ##### 1. `groupby()` 基础用法 ```python # 按Category分组并求平均值 grouped = df.groupby('Category').mean() print(grouped) ``` 输出: ``` Value Weight Category A 20.0 1.233 B 20.0 0.850 ``` ##### 2. `apply()` 基础用法 ```python # 对每行计算加权值(跨列操作) df['Weighted_Value'] = df.apply( lambda row: row['Value'] * row['Weight'], axis=1 # 按行应用 ) print(df) ``` 输出: ``` Category Value Weight Weighted_Value 0 A 10 1.2 12.0 1 B 15 0.8 12.0 2 A 20 1.5 30.0 3 B 25 0.9 22.5 4 A 30 1.0 30.0 ``` ##### 3. `groupby()` + `apply()` 组合 ```python # 分组后对每个组自定义操作(如归一化) def normalize(group): group['Value_Norm'] = group['Value'] / group['Value'].max() return group result = df.groupby('Category').apply(normalize) print(result) ``` 输出: ``` Category Value Weight Value_Norm 0 A 10 1.2 0.333 2 A 20 1.5 0.667 4 A 30 1.0 1.000 1 B 15 0.8 0.600 3 B 25 0.9 1.000 ``` --- #### 三、关键区别 | **特性** | **`groupby()`** | **`apply()`** | |----------------|--------------------------------------------|-----------------------------------------| | **输入对象** | DataFrame → 生成分组对象 | 直接操作DataFrame/Series | | **核心操作** | 先分组 → 再处理组内数据 | 沿轴逐行/列应用函数 | | **返回值** | 通常返回聚合结果(标量/新DF) | 返回与输入同形状或自定义形状的对象 | | **典型场景** | 分组统计(如各分类平均分) | 行/列级复杂计算(如跨列运算) | | **性能** | 针对分组优化,大数据集高效 | 逐元素操作,大数据集可能较慢 | > **组合技巧**:`groupby().apply()`可处理**组级复杂操作**(如组内排序、自定义聚合),此时`apply()`作用于每个分组子集[^3][^4]。 --- #### 四、如何选择? - 需**分类统计**(求和/均值等) → 直接用`groupby().agg()` - 需**跨列计算每行** → 用`apply(axis=1)` - 需**组内复杂处理**(如组内归一化) → 用`groupby().apply()` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值