当前位置:网站首页 > 技术博客 > 正文

聚合函数语法



本内容来自:https://gairuo.com

Python培训

本内容来自:https://gairuo.com

pandas 的 agg() 是 aggregate() 方法的简写别名,它能在指定轴上使用一个或多个操作进行聚合,对 Series、DataFrame 以及分组对象都有效。所谓聚合,就是将多个值经过计算产生一个值的过程。在 pandas 数据处理和数据分析过程中,我们按轴进行聚合,一个轴的数据聚合为一个值,如果是分组对象,一个分组的数据也可能聚合为一个值。

agg 是 aggregate 的别名,在指定轴上使用一个或多个操作进行聚合。建议使用 df.agg,而不是 df.aggregate。它的一般语法是:

以下是参数说明

  • func : function, str, list 或者 dict。用于聚合数据的函数。如果是函数,则必须在传递给 DataFrame 或传递给 DataFrame.apply。可接受的组合为:
    • 函数 function
    • 字符串函数名 string function name
    • 函数和/或函数名列表,如
    • 轴标签->函数、函数名称或此类列表的字典
    • 注:可不传,支持「嵌套重命名」(nested renamer)特殊语法,见下文介绍
  • axis : {0 or 'index', 1 or 'columns'}, 默认 0
    • 如果 0 或者 'index':将函数应用于每列
    • 如果 1 或者 'columns': 将函数应用于每一行
  • :要传递给“func”的位置参数
  • :要传递给“func”的关键字参数

返回的数据有 scalar(标量), Series 或者 DataFrame,其中有:

  • scalar : 当 Series.agg 调用单个函数时
  • Series : 当 DataFrame.agg 调用单个函数时,Series.agg 调用多个函数时
  • DataFrame : 当 DataFrame.agg 调用多个函数时

聚合操作始终在一个轴上执行,即索引轴(默认值)或列轴。这种行为不同于 的聚合函数(、、、、、),其中默认值是计算展平数组(flattened array)的聚合,例如 而不是 。

传递变异对象(此处变异对象为非序列类型对象)的函数可能会产生意外行为或错误,因此不受支持,用户定义函数需要第一个参数传递一个 Series 以进行计算。

func 的参数可以为 None 不传,这种情况下,全关键字(可多个)形式传入,支持:

  • Series:支持 新索引名=聚合函数
  • DataFrame:支持 新列名=(原列名,聚合函数) 命名聚合功能(或者嵌套重命名),实现聚合后的列自定义列名功能,用 pd.NamedAgg 可显示定义
  • Grouby:也支持 新列名=(原列名,聚合函数) 命名聚合功能,同上

Series.agg 的应用和一般语法中介绍的一样,其中 axis 参数的取值为 {0 or ‘index’},并且不可指定其他值,仅与 DataFrame.agg 做了兼容。

以下是一些简单的示例:

Series 的 agg 不支持「嵌套重命名」(nested renamer)功能(关键字的值取元组,当然,这也没啥用)。

以下是一些简单的应用示例:

agg 支持「嵌套重命名」(nested renamer)特殊语法(原理见下文命名聚合 pd.NamedAgg 相关介绍,类似),如果无传入函数,而全为 关键字=(列名, 聚合函数) 形式会按重新标记处理。重新标记将关键字解析这对应的行索引,值取列名对应列的聚合函数计算结果。

agg 可以为分组对象调用方法,与 DataFrame 的一点不同是,DataFrameGroupBy 对象在使用 agg 时可以指定计算引擎(engine 参数)和 引擎的参数(engine_kwargs)。

语法为:

参数:

  • func:function, str, list 或者 dict,有:
    • 函数 function
    • 字符串函数名 string function name
    • 函数和/或函数名列表,如
    • 轴标签->函数、函数名称或此类列表的字典
    • 注:还可以接受指定了 engine='Numba' 的 Numba JIT 函数。此引擎仅支持传递单个函数。如果选择了 “numba”引擎,则函数必须是用户定义的函数,其值和索引分别作为函数签名中的第一个和第二个参数,每个组的索引都将传递给用户定义的函数,并且可以选择使用
    • 注:支持「命名聚合」特殊语法,见下文 pd.NamedAgg
  • engine:str, 默认 None,有:
    • 'cython' : 通过cython的C扩展执行函数
    • 'numba' : 通过numba中的JIT编译代码运行函数
    • None : 默认为 “cython” 或全局设置 compute.use_numba
  • engine_kwargs:dict, 默认 None,有:
    • 对于 'cython' 引擎,没有可授受的参数
    • 对于 'numba' 引擎, 引擎可以接受 nopython、nogil 和并行字典键。值必须为 True 或 False,默认值是 {'nopython':True,'nogil':False,'parallel':False},并将应用于函数
  • :要传递给“func”的位置参数
  • :要传递给“func”的关键字参数

返回:

  • DataFrame

使用 engine='numba' 时,内部将不会出现“回退”行为,组数据和组索引将作为 numpy 数组传递给 JITed 用户定义函数,并且不会执行其他尝试。

一些示例:

为了控制每列具有不同聚合的输出名称,pandas 支持“命名聚合”:

在版本 1.3.0 中更改:生成的数据类型将反映聚合函数的返回值:

一些其他案例:

通常,输出列名应该是唯一的。不能将同一函数(或两个同名函数)应用于同一列。

pandas 允许您提供多个 lambda。在这种情况下,pandas 将破坏(匿名)lambda 函数的名称,并将 附加到每个后续lambda。

通过向聚合传递 dict,您可以对 DataFrame 的列应用不同的聚合:

时间重采样可以使用 agg,语法与 DataFrame 类似,为:

案例:

agg 可以为滚动窗口对象调用方法。语法与 DataFrame 类似,为:

示例:

agg 可以为扩展窗口对象调用方法。语法为:

示例如下:

「嵌套重命名」(nested renamer)功能可以利用 pd.NamedAgg 对象完成,它是一个 namedtuple 对象( 在 Python collections 内置库),在 pandas 源码中是这样定义的:

它是为了支持特定于列的聚合并控制输出列名,pandas 接受 GroupBy 中的特殊语法。它是 agg() 的“命名聚合”,其中关键字是输出列名(NamedAgg 位),值是元组,其第一个元素(column 位)是要选择的列,第二个元素(aggfunc 位)是要应用于该列的聚合。

NamedAgg 将字段 利用 namedtuple 进行耦合,以更清楚地说明参数是什么。通常,聚合方法(aggfunc 值)可以是可调用对象的别名或字符串别名。

例如:

pandas.NamedAgg 只是一个 namedtuple,也允许使用纯元组:

如果所需的输出列名不是有效的 Python 关键字,请构造一个字典并解压关键字参数,利用双星号解包的特性,我们可以给新列名指定一个不符合 Python 变量的名称:

在以上操作中,只有成对的(列,aggfunc),聚合函数的其他参数无法传递,如果想传递聚合函数其他参数( ),请使用 functools.partial() 应用这些参数。

关于为何要解包传入,这是 Python 传入关键字的技巧,所有关键字和值组成字典,因 agg 支持关键字参数是一个字典,它可以接受这个字典(我们平时看到的解包字典为 ),因此我们再将这个字典解包为字典,而解包外层不需要再加字典字面量。如果不理解的话可以感受下下边的例子:

对于 Python3.5 和更早版本,函数中 的顺序没有保留,这意味着输出列顺序不一致,为了确保顺序一致,Python 3.5 中的键(以及输出列)将始终进行排序。

命名聚合也适用于 Series groupby 聚合。在下例中,没有列选择,因此值只是函数:

这于命名聚合的实现原理是这样的。参数 fun 参数默认为 None,如果没有传入 fun 参数,而仅有关键字参数,会被解析为该功能的表达形式。

agg 的使用方法总结如下:

agg 支持的对象有:

  • pandas.DataFrame.agg
  • pandas.Series.agg
  • pandas.core.groupby.GroupBy.agg
  • pandas.core.groupby.DataFrameGroupBy.aggregate
  • pandas.core.groupby.SeriesGroupBy.aggregate
  • pandas.core.resample.Resampler.aggregate
  • pandas.core.window.expanding.Expanding.aggregate
  • pandas.core.window.rolling.Rolling.aggregate
  • https://pandas.pydata.org/docs/user_guide/groupby.html#aggregation
  • https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.agg.html
  • https://pandas.pydata.org/docs/reference/api/pandas.core.groupby.DataFrameGroupBy.aggregate.html
  • https://pandas.pydata.org/docs/reference/api/pandas.core.resample.Resampler.aggregate.html
  • https://pandas.pydata.org/docs/reference/api/pandas.core.window.expanding.Expanding.aggregate.html
  • https://pandas.pydata.org/docs/reference/api/pandas.core.window.rolling.Rolling.aggregate.html
  • pandas 按版本统计测试通过和失败数量 2024-07-21 18:03:28
  • pandas 按 ID 合并英文姓名 2023-11-14 22:35:59
  • pandas 相同类型的值拼接在一起 2023-09-11 11:28:29
  • pandas 对数据按分组进行描述统计 2023-08-30 19:05:30
  • pandas 查找重复项并将值拆分列 2023-08-30 16:12:03
  • pandas 分组后将组内数据转为有序列表 2023-08-28 16:12:19
  • pandas 按组显示列值的列表 2022-11-22 16:07:58
  • pandas 将连续数字分组求和 2022-07-04 16:37:40
  • pandas 书单整理将同种书合并在一起 2022-05-15 22:38:20
  • pandas 根据值数字显示列名排序 2022-01-15 10:45:36
  • pandas 将列表转为以字符为键的字典 2022-01-14 14:18:05
  • pandas 时序取当天开始时间和结束时间 2020-11-30 11:02:32
< apply() 按轴应用函数 pandas 函数应用 transform() 数值转换 >

< transform() 数值转换 pandas 函数详细介绍 groupby apply() 和 transform() 区别 >

更新时间:2022-11-14 11:50:04 标签:pandas agg 聚合

版权声明


相关文章:

  • python爬虫手机版下载2025-05-26 22:01:05
  • flex布局教程实例篇2025-05-26 22:01:05
  • 结构体指针如何定义2025-05-26 22:01:05
  • HashMap和Hashtable的区别2025-05-26 22:01:05
  • 软件版本编号规则2025-05-26 22:01:05
  • 在线ktv的软件2025-05-26 22:01:05
  • 大家来找茬官方版2025-05-26 22:01:05
  • 数据结构导论知识点2025-05-26 22:01:05
  • devc++的使用方法2025-05-26 22:01:05
  • springcloud gateway 性能2025-05-26 22:01:05