当前位置: 首页 > article >正文

78_Pandasagg()和aggregate()的用法

78_Pandasagg()和aggregate()的用法

通过使用pandas.DataFrame和Series的agg()或aggregate()方法,可以对行或列同时应用多个操作进行聚合。agg()是aggregate()的别名,二者用法相同。

pandas.DataFrame.agg — pandas 2.1.3 文档

pandas.Series.agg — pandas 2.1.3 文档

目录

  • agg()和aggregate()是相同的
  • agg()的基本用法
    • 对于pandas.DataFrame
    • 对于pandas.Series
  • agg()的第一个参数可以指定的操作(函数或方法)
    • 函数或方法名的字符串
    • 可调用对象
    • 指定函数或方法的参数
    • 对不支持的数据类型dtype的处理

如果希望一次性获取各列的主要统计量(如平均值、标准差等),可以使用describe()方法,比通过agg()指定列表更简单。

相关文章:59_Pandas中使用describe获取每列的汇总统计信息(平均值、标准差等)

本文代码示例中使用的pandas和NumPy版本如下。需要注意的是,不同版本可能存在差异。

import pandas as pd
import numpy as npprint(pd.__version__)
# 2.1.2print(np.__version__)
# 1.26.1

agg()和aggregate()是相同的

如开头所述,agg()是aggregate()的别名,二者效果相同。

print(pd.DataFrame.agg is pd.DataFrame.aggregate)
# Trueprint(pd.Series.agg is pd.Series.aggregate)
# True

agg()的基本用法

对于pandas.DataFrame

以下是一个DataFrame示例:

df = pd.DataFrame({'A': [0, 1, 2], 'B': [3, 4, 5]})
print(df)#    A  B
# 0  0  3
# 1  1  4
# 2  2  5

在agg()的第一个参数中,可以指定要应用的函数或方法的名称(字符串)、可调用对象或其列表。以下示例使用字符串,详细说明见后文。

当指定列表时,返回DataFrame;当单独指定字符串或可调用对象时,返回Series。即使元素数量为1,只要是列表,返回的也是DataFrame。

print(df.agg(['sum', 'mean', 'min', 'max']))
#         A     B
# sum   3.0  12.0
# mean  1.0   4.0
# min   0.0   3.0
# max   2.0   5.0print(type(df.agg(['sum', 'mean', 'min', 'max'])))
# <class 'pandas.core.frame.DataFrame'>print(df.agg(['sum']))
#      A   B
# sum  3  12print(type(df.agg(['sum'])))
# <class 'pandas.core.frame.DataFrame'>print(df.agg('sum'))
# A     3
# B    12
# dtype: int64print(type(df.agg('sum')))
# <class 'pandas.core.series.Series'>

通过指定一个以列名为键(key),操作为值(value)的字典,可以对不同列应用不同的操作。

print(df.agg({'A': ['sum', 'min', 'max'], 'B': ['mean', 'min', 'max']}))
#         A    B
# sum   3.0  NaN
# min   0.0  3.0
# max   2.0  5.0
# mean  NaN  4.0

如果操作不是列表而是单独指定,则返回Series。如果任一列指定了列表,则返回DataFrame。

print(df.agg({'A': 'sum', 'B': 'mean'}))
# A    3.0
# B    4.0
# dtype: float64print(df.agg({'A': ['sum'], 'B': 'mean'}))
#      A    B
# sum  3.0  NaN
# mean NaN  4.0print(df.agg({'A': ['min', 'max'], 'B': 'mean'}))
#       A    B
# min  0.0  NaN
# max  2.0  NaN
# mean NaN  4.0

默认情况下,agg()按列操作。如果将参数axis设置为1或’columns’,则按行操作。

print(df.agg(['sum', 'mean', 'min', 'max'], axis=1))
#    sum  mean  min  max
# 0  3.0   1.5  0.0  3.0
# 1  5.0   2.5  1.0  4.0
# 2  7.0   3.5  2.0  5.0

对于pandas.Series

以下是一个Series示例:

s = pd.Series([0, 1, 2])
print(s)# 0    0
# 1    1
# 2    2
# dtype: int64

当agg()的第一个参数为列表时,返回Series;当单独指定时,返回标量值。即使元素数量为1,只要是列表,返回的也是Series。

print(s.agg(['sum', 'mean', 'min', 'max']))
# sum     3.0
# mean    1.0
# min     0.0
# max     2.0
# dtype: float64print(type(s.agg(['sum', 'mean', 'min', 'max'])))
# <class 'pandas.core.series.Series'>print(s.agg(['sum']))
# sum    3
# dtype: int64print(type(s.agg(['sum'])))
# <class 'pandas.core.series.Series'>print(s.agg('sum'))
# 3print(type(s.agg('sum')))
# <class 'numpy.int64'>

如果通过字典指定,键(key)将作为结果的标签名,而值(value)为要执行的操作。

print(s.agg({'Total': 'sum', 'Average': 'mean', 'Min': 'min', 'Max': 'max'}))
# Total      3.0
# Average    1.0
# Min        0.0
# Max        2.0
# dtype: float64

字典的值(value)不能指定为列表。

# print(s.agg({'NewLabel_1': ['sum', 'max'], 'NewLabel_2': ['mean', 'min']}))
# SpecificationError: nested renamer is not supported

agg()的第一个参数可以指定的操作(函数或方法)

函数或方法名的字符串

agg()的第一个参数中指定的字符串会通过_apply_str()函数进行检查。此前,这一函数名为_try_aggregate_string_function()

def _apply_str(self, obj, func: str, *args, **kwargs):"""...

如果 arg 是字符串,则尝试对其进行操作:

  • 尝试在 obj 上找到一个函数(或属性)
  • 尝试找到一个 numpy 函数
  • 抛出错误

obj(此处为 SeriesDataFrame)的与方法、属性以及 NumPy 函数名称一致的字符串是有效的。

例如,'count'SeriesDataFrame 的方法,但在 NumPy 中不存在;而 'amax'NumPy 的函数,但在 SeriesDataFrame 中不存在。两者均可通过字符串指定。

pandas.Series.count — pandas 2.1.3 文档
numpy.amax — NumPy v1.26 手册

df = pd.DataFrame({'A': [0, 1, 2], 'B': [3, 4, 5]})
print(df)# A  B
# 0  0  3
# 1  1  4
# 2  2  5print(df.agg(['count', 'amax']))#         A  B
# count   3  3
# amax    2  5print(df['A'].count())
# 3# print(np.count(df['A']))
# AttributeError: module 'numpy' has no attribute 'count'print(np.amax(df['A']))
# 2# print(df['A'].amax())
# AttributeError: 'Series' object has no attribute 'amax'

与上述规则不匹配的字符串将导致错误。

# print(df.agg(['xxx']))
# AttributeError: 'xxx' is not a valid function for 'Series' object# print(df.agg('xxx'))
# AttributeError: 'xxx' is not a valid function for 'DataFrame' object

从上述错误信息可以看出,当以列表形式指定时,将使用 Series 的方法;当以单独字符串形式指定时,将使用 DataFrame 的方法或属性。

此外,从 _apply_str() 的源代码可以看出,NumPy 函数在 obj 拥有 __array__ 属性时才有效。

DataFrameSeries 拥有 __array__ 属性,但 groupby()resample()rolling() 等返回的对象不具备此属性。

print(hasattr(pd.DataFrame, '__array__'))
# Trueprint(hasattr(pd.core.groupby.GroupBy, '__array__'))
# False

因此,对于 groupby()resample()rolling() 等返回的对象的 agg() 方法,NumPy 函数名称的字符串是无效的,但可以通过调用对象(如 np.xxx)的形式指定。

需要注意的是,这是 pandas 2.1.2 的行为,版本不同可能会有差异。


可调用对象

agg() 的第一个参数可以指定可调用对象,例如通过 def 定义的函数或匿名函数(lambda 表达式)。

df = pd.DataFrame({'A': [0, 1, 2], 'B': [3, 4, 5]})
print(df)# A  B
# 0  0  3
# 1  1  4
# 2  2  5def my_func(x):return x.min() + x.max()print(df.agg([my_func, lambda x: x.min() - x.max()]))#           A  B
# my_func   2  8
# <lambda> -2 -2

为函数或方法指定参数

通过 agg() 指定的关键字参数将传递给应用的函数或方法。

df = pd.DataFrame({'A': [0, 1, 2], 'B': [3, 4, 5]})
print(df)# A  B
# 0  0  3
# 1  1  4
# 2  2  5print(df.agg('std'))
# A    1.0
# B    1.0
# dtype: float64print(df.agg('std', ddof=0))
# A    0.816497
# B    0.816497
# dtype: float64print(df.agg(['std'], ddof=0))
#         A         B
# std  0.816497  0.816497

当指定多个函数或方法时,所有关键字参数都会传递给它们。如果某个函数无法接受参数,则会引发错误。

# print(df.agg(['max', 'std'], ddof=0))
# TypeError: max() got an unexpected keyword argument 'ddof'

如果需要为每个函数分别指定参数,可以使用 lambda 表达式。

print(df.agg(['max', lambda x: x.std(ddof=0)]))#           A           B
# max  2.000000  5.000000
# <lambda>  0.816497  0.816497

处理不支持的数据类型 (dtype)

以下示例以包含字符串列的 DataFrame 为例:

df_str = pd.DataFrame({'A': [0, 1, 2], 'B': [3, 4, 5], 'C': ['X', 'Y', 'Z']})
print(df_str)# A  B  C
# 0  0  3  X
# 1  1  4  Y
# 2  2  5  Z

例如,从包含字符串的 Series 上调用 mean() 会引发错误,因此通过 agg() 指定时也会出错。

# df_str['C'].mean()
# TypeError: Could not convert XYZ to numeric# print(df_str.agg(['mean']))
# TypeError: Could not convert string 'XYZ' to numeric

需要注意的是,这是 pandas 2.1.2 的行为。在 pandas 1.0.4 中不会引发错误,而是返回 NaN

DataFramemean() 实现了 numeric_only 参数,但 Seriesmean() 未实现该参数。因此,当以列表形式指定(按 Series 处理)时,numeric_only 无法使用。

pandas.DataFrame.mean — pandas 2.1.3 文档

print(df_str.mean(numeric_only=True))
# A    1.0
# B    4.0
# dtype: float64print(df_str.agg('mean', numeric_only=True))
# A    1.0
# B    4.0
# dtype: float64# df_str['C'].mean(numeric_only=True)
# TypeError: Series.mean does not allow numeric_only=True with non-numeric dtypes.# print(df_str.agg(['mean'], numeric_only=True))
# TypeError: Series.mean does not allow numeric_only=True with non-numeric dtypes.

如果只希望针对数值列,可以在调用 agg() 前使用 select_dtypes()

print(df_str.select_dtypes(include='number').agg(['sum', 'mean']))#         A     B
# sum   3.0  12.0
# mean  1.0   4.0

相关文章:

78_Pandasagg()和aggregate()的用法

78_Pandasagg()和aggregate()的用法 通过使用pandas.DataFrame和Series的agg()或aggregate()方法&#xff0c;可以对行或列同时应用多个操作进行聚合。agg()是aggregate()的别名&#xff0c;二者用法相同。 pandas.DataFrame.agg — pandas 2.1.3 文档 pandas.Series.agg —…...

QT:串口上位机

创建工程 布局UI界面 设置名称 设置数据 设置波特率 波特率默认9600 设置数据位 数据位默认8 设置停止位 设置校验位 调整串口设置、接收设置、发送设置为Group Box 修改配置 QT core gui serialport 代码详解 mianwindow.h 首先在mianwindow.h当中定义一个串口指…...

C++跨平台开发环境搭建全指南:工具链选型与性能优化实战

C跨平台开发环境搭建全指南&#xff1a;工具链选型与性能优化实战 目录 开发环境搭建工具链选型性能优化实战常见问题排查 开发环境搭建 操作系统环境准备 Windows# 安装Visual Studio Build Tools choco install visualstudio2022buildtools choco install cmake --instal…...

数据批处理(队列方式)

数据批处理&#xff08;队列方式&#xff09; public class DataProcessor {private static final int THREAD_COUNT 4;private static final int QUEUE_SIZE 10;private LinkedBlockingQueue<Data> queue new LinkedBlockingQueue<>(QUEUE_SIZE);public DataP…...

win32汇编环境,网络编程入门之二

;运行效果 ;win32汇编环境,网络编程入门之二 ;本教程在前一教程的基础上&#xff0c;研究一下如何得到服务器的返回的信息 ;正常的逻辑是连接上了&#xff0c;然后我发送什么&#xff0c;它返回什么&#xff0c;但是这有一个很尴尬的问题。 ;就是如何表现出来。因为网络可能有延…...

MATLAB—从入门到精通的第二天

在第一天的学习中&#xff0c;我们掌握了 MATLAB 的安装配置、基础语法、变量管理和运算符的使用。本文将深入讲解 控制结构&#xff08;嵌套 if、switch&#xff09;、循环类型 和 向量操作&#xff0c;帮助读者进一步掌握 MATLAB 的核心编程技能。 1. 条件语句进阶 1.1 嵌套…...

【认识OpenThread协议】

OpenThread 是一种基于 IPv6 、IEEE 802.15.4 标准的低功耗无线 Mesh 网络协议&#xff0c;主要用于智能家居、物联网设备等场景。它的设计目标是实现设备之间的高效通信、低功耗运行和高可靠性。 OpenThread官方文档 ① 特性 低功耗: 适合电池供电的设备。 Mesh 网络: 支持多…...

驱动开发系列46 - Linux 显卡KMD驱动代码分析(七)- 显存管理

目录 一:概述 二:应用程序和UMD调用栈 三:KMD 显存分配和和映射过程 一:概述 显存管理是图形驱动程序中至关重要的一部分,涉及到从用户空间(UMD,User Mode Driver)到内核空间(KMD,Kernel Mode Driver)的显存分配和管理。本文将首先梳理从一个 OpenGL 应…...

MATLAB代码开发实战:从入门到高效应用

一、MATLAB生态系统的核心优势 &#xff08;扩展原有内容&#xff0c;增加行业数据&#xff09; MATLAB在全球工程领域的市场占有率已达67%&#xff08;2024年IEEE统计&#xff09;&#xff0c;其核心优势体现在&#xff1a; 矩阵运算速度比传统编程快3-5倍包含22个专业工具箱…...

为什么 NFS 不适合作为 TDengine 的数据存储

NFS NFS 是一种分布式文件系统&#xff0c;允许多台计算机通过网络共享文件。其具有以下优点&#xff1a; 共享存储: 多个数据库实例可以共享同一个 NFS 目录&#xff0c;适合分布式数据库或集群环境。灵活性: 数据存储可以集中管理&#xff0c;便于备份和迁移。成本低: 利用…...

办公常用自动化工具

自动化办公工具说明文档 代码全部在底部。 文件批量重命名工具 (file_renamer.py) 功能概述 file_renamer.py 是一个用于批量重命名文件的工具&#xff0c;可以根据自定义规则为文件重命名&#xff0c;支持按日期、序号、原文件名等格式进行命名。 主要功能 支持按文件类…...

字节跳动 —— 建筑物组合(滑动窗口+溢出问题)

原题描述&#xff1a; 题目精炼&#xff1a; 给定N个建筑物的位置和一个距离D&#xff0c;选取3个建筑物作为埋伏点&#xff0c;找出所有可能的建筑物组合&#xff0c;使得每组中的建筑物之间的最大距离不超过D。最后&#xff0c;输出不同埋伏方案的数量并对99997867取模。 识…...

开源数字人模型Heygem

一、Heygem是什么 Heygem 是硅基智能推出的开源数字人模型&#xff0c;专为 Windows 系统设计。基于先进的AI技术&#xff0c;仅需1秒视频或1张照片&#xff0c;能在30秒内完成数字人形象和声音克隆&#xff0c;在60秒内合成4K超高清视频。Heygem支持多语言输出、多表情动作&a…...

Linux远程工具SecureCRT下载安装和使用

SecureCRT下载安装和使用 SecureCRT是一款功能强大的终端仿真软件&#xff0c;它支持SSH、Telnet等多种协议&#xff0c;可以连接和管理基于Unix和Windows的远程主机和网络设备。SecureCRT提供了语法高亮、多标签页管理、会话管理、脚本编辑等便捷功能&#xff0c;安全性高、操…...

从前端视角理解消息队列:核心问题与实战指南

消息队列&#xff08;Message Queue&#xff09;是现代分布式系统的核心组件之一&#xff0c;它在前后端协作、系统解耦、流量削峰等场景中发挥着重要作用。本文从前端开发者视角出发&#xff0c;解析消息队列的关键问题&#xff0c;并结合实际场景给出解决方案。 一、为什么要…...

Android 线程池实战指南:高效管理多线程任务

在 Android 开发中&#xff0c;线程池的使用非常重要&#xff0c;尤其是在需要处理大量异步任务时。线程池可以有效地管理线程资源&#xff0c;避免频繁创建和销毁线程带来的性能开销。以下是线程池的使用方法和最佳实践。 1. 线程池的基本使用 &#xff08;1&#xff09;创建线…...

CentOS7下安装MongoDB

步骤 1&#xff1a;创建 MongoDB Yum 仓库文件 你需要创建一个 MongoDB 的 Yum 仓库配置文件&#xff0c;以便从官方源下载 MongoDB。打开终端并使用以下命令创建并编辑该文件&#xff1a; sudo vi /etc/yum.repos.d/mongodb-org-7.0.repo 在打开的文件中&#xff0c;输入以下…...

江科大51单片机笔记【15】直流电机驱动(PWM)

写在前言 此为博主自学江科大51单片机&#xff08;B站&#xff09;的笔记&#xff0c;方便后续重温知识 在后面的章节中&#xff0c;为了防止篇幅过长和易于查找&#xff0c;我把一个小节分成两部分来发&#xff0c;上章节主要是关于本节课的硬件介绍、电路图、原理图等理论…...

【网络协议详解】——QOS技术(学习笔记)

目录 QoS简介 QoS产生的背景 QoS服务模型 基于DiffServ模型的QoS组成 MQC简介 MQC三要素 MQC配置流程 优先级映射配置(DiffServ域模式) 优先级映射概述 优先级映射原理描述 优先级映射 PHB行为 流量监管、流量整形和接口限速简介 流量监管 流量整形 接口限速…...

【工具使用】IDEA 社区版如何创建 Spring Boot 项目(详细教程)

IDEA 社区版如何创建 Spring Boot 项目&#xff08;详细教程&#xff09; Spring Boot 以其简洁、高效的特性&#xff0c;成为 Java 开发的主流框架之一。虽然 IntelliJ IDEA 专业版提供了Spring Boot 项目向导&#xff0c;但 社区版&#xff08;Community Edition&#xff09…...

基于Prometheus+Grafana的Deepseek性能监控实战

文章目录 1. 为什么需要专门的大模型监控?2. 技术栈组成2.1 vLLM(推理引擎层)2.2 Prometheus(监控采集层)2.3 Grafana(数据可视化平台)3. 监控系统架构4. 实施步骤4.1 启动DeepSeek-R1模型4.2 部署 Prometheus4.2.1 拉取镜像4.2.2 编写配置文件4.2.3 启动容器4.3 部署 G…...

Spring学习笔记:工厂模式与反射机制实现解耦

1.什么是Spring? spring是一个开源轻量级的java开发应用框架&#xff0c;可以简化企业级应用开发 轻量级 1.轻量级(对于运行环境没有额外要求) 2.代码移植性高(不需要实现额外接口) JavaEE的解决方案 Spring更像是一种解决方案&#xff0c;对于控制层&#xff0c;它有Spring…...

pytest数据库测试文章推荐

参考链接&#xff1a; 第一部分&#xff1a;http://alextechrants.blogspot.fi/2013/08/unit-testing-sqlalchemy-apps.html第二部分&#xff1a;http://alextechrants.blogspot.fi/2014/01/unit-testing-sqlalchemy-apps-part-2.html...

vue3 二次封装uni-ui中的组件,并且组件中有 v-model 的解决方法

在使用uniappvue3开发中&#xff0c; 使用了uni-ui的组件&#xff0c;但是我们也需要自定义组件&#xff0c;比如我要自定一个picker 的组件&#xff0c; 是在 uni-data-picker 组件的基础上进行封装的 父组件中的代码 <classesselect :selectclass"selectclass"…...

探索高性能AI识别和边缘计算 | NVIDIA Jetson Orin Nano 8GB 开发套件的全面测评

随着边缘计算和人工智能技术的迅速发展&#xff0c;性能强大的嵌入式AI开发板成为开发者和企业关注的焦点。NVIDIA近期推出的Jetson Orin Nano 8GB开发套件&#xff0c;凭借其40 TOPS算力、高效的Ampere架构GPU以及出色的边缘AI能力&#xff0c;引起了广泛关注。本文将从配置性…...

Prompt 工程

一、提示原則 import openai import os import openai from dotenv import load_dotenv, find_dotenv from openai import OpenAI def get_openai_key():_ load_dotenv(find_dotenv())return os.environ[OPENAI_API_KEY]client OpenAI(api_keyget_openai_key(), # This is …...

【学习笔记】《逆向工程核心原理》03.abex‘crackme-2、函数的调用约定、视频讲座-Tut.ReverseMe1

文章目录 abexcrackme-21. Visual Basic文件的特征1.1. VB专用引擎1.2. 本地代码与伪代码1.3. 事件处理程序1.4. 未文档化的结构体 2. 开始调试2.1. 间接调用2.2. RT_MainStruct结构体2.3. ThunRTMain()函数 3. 分析crackme3.1. 检索字符串3.2. 查找字符串地址3.3. 生成Serial的…...

React基础之项目实战

规范的项目结构 安装scss npm install sass -D 安装Ant Design组件库 内置了一些常用的组件 npm install antd --save 路由基础配置 npm i react-router-dom 路由基本入口 import Layout from "../page/Layout"; import Login from "../page/Login"; impor…...

SAP-ABAP:SAP数据库视图的创建图文详解

在SAP ABAP中&#xff0c;数据库视图&#xff08;Database View&#xff09;是通过ABAP字典&#xff08;ABAP Dictionary&#xff09;创建的。数据库视图是基于一个或多个数据库表的虚拟表&#xff0c;它允许你定义一种逻辑视图来访问数据。以下是创建数据库视图的步骤&#xf…...

基于深度学习的肺炎X光影像自动诊断系统实现,真实操作案例分享,值得学习!

医疗影像智能化的技术演进 医学影像分析正经历从人工判读到AI辅助诊断的革命性转变。传统放射科医师分析胸部X光片需要8-12年专业训练&#xff0c;而基于深度学习的智能系统可在秒级完成检测。本文将以肺炎X光检测为切入点&#xff0c;详解从数据预处理到模型部署的全流程实现。…...