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

深入解析 `DataFrame.groupby` 和 `agg` 的用法及使用场景

深入解析 `DataFrame.groupby` 和 `agg` 的用法及使用场景

    • 1. `groupby` 的基本用法
      • 语法:
      • 示例:
    • 2. `agg` 的基本用法
      • 语法:
      • 示例:
    • 3. `first`、`sum`、`lambda` 的用法
      • 3.1 `first`
        • 示例:
      • 3.2 `sum`
        • 示例:
      • 3.3 `lambda`
        • 示例:
    • 4. `reset_index` 的用法
      • 语法:
      • 示例:
    • 5. 综合示例:`groupby` + `agg` 的完整用法
    • 6. 总结

在数据分析和处理中,pandas 是一个非常强大的工具。其中,DataFrame.groupbyagg 是两个常用的功能,它们可以帮助我们对数据进行分组、聚合和转换。本文将详细讲解 groupbyagg 的用法,以及如何结合 firstsumlambdareset_index 来实现复杂的数据处理。


1. groupby 的基本用法

groupbypandas 中用于分组数据的函数。它的核心思想是将数据按照某个或某些列的值进行分组,然后对每个分组进行操作。

语法:

DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False)
  • by:指定分组的列名或列名列表。
  • as_index:是否将分组列作为索引,默认为 True
  • sort:是否对分组键进行排序,默认为 True

示例:

假设我们有一个包含学生成绩的 DataFrame

import pandas as pddata = {'Name': ['Alice', 'Bob', 'Alice', 'Bob', 'Alice'],'Subject': ['Math', 'Math', 'Science', 'Science', 'Math'],'Score': [85, 90, 88, 92, 95]
}df = pd.DataFrame(data)
print(df)

输出:

    Name  Subject  Score
0  Alice     Math     85
1    Bob     Math     90
2  Alice  Science     88
3    Bob  Science     92
4  Alice     Math     95

我们可以按照 Name 列进行分组:

grouped = df.groupby('Name')
print(grouped.groups)

输出:

{'Alice': [0, 2, 4], 'Bob': [1, 3]}

2. agg 的基本用法

agggroupby 对象的一个方法,用于对分组后的数据进行聚合操作。它可以接受一个函数、字符串(如 'sum''mean')或字典(指定不同列的聚合方式)。

语法:

DataFrame.groupby(...).agg(func, *args, **kwargs)
  • func:聚合函数,可以是字符串、函数或字典。

示例:

我们继续使用上面的 df,计算每个学生的平均分:

result = df.groupby('Name').agg({'Score': 'mean'})
print(result)

输出:

        Score
Name        
Alice   89.333333
Bob     91.000000

3. firstsumlambda 的用法

agg 中,我们可以使用多种聚合函数来处理数据。以下是常用的几种:

3.1 first

first 用于获取每个分组中第一行的值。

示例:
result = df.groupby('Name').agg({'Subject': 'first', 'Score': 'mean'})
print(result)

输出:

        Subject      Score
Name                      
Alice     Math  89.333333
Bob       Math  91.000000

3.2 sum

sum 用于计算每个分组中数值列的总和。

示例:
result = df.groupby('Name').agg({'Score': 'sum'})
print(result)

输出:

        Score
Name        
Alice     268
Bob       182

3.3 lambda

lambda 是一种匿名函数,可以在 agg 中自定义聚合逻辑。

示例:

假设我们想将每个学生的 Score 转换为字符串,并在前面加上 "Score: "

result = df.groupby('Name').agg({'Score': lambda x: 'Score: ' + str(x.sum())})
print(result)

输出:

                Score
Name                
Alice  Score: 268.0
Bob    Score: 182.0

4. reset_index 的用法

reset_index 用于重置 DataFrame 的索引。当使用 groupbyagg 后,分组列会作为索引,如果需要将其还原为普通列,可以使用 reset_index

语法:

DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill='')
  • drop:是否丢弃索引列,默认为 False

示例:

result = df.groupby('Name').agg({'Score': 'mean'}).reset_index()
print(result)

输出:

    Name      Score
0  Alice  89.333333
1    Bob  91.000000

5. 综合示例:groupby + agg 的完整用法

现在,我们来看一个更复杂的例子,结合 firstsumlambdareset_index 来处理数据。

假设我们有一个包含边信息的 DataFrame

data = {'edge_key': ['A', 'A', 'B', 'B', 'C'],'source': ['X', 'X', 'Y', 'Y', 'Z'],'target': ['P', 'P', 'Q', 'Q', 'R'],'text_unit_ids': [[1, 2], [3], [4], [5, 6], [7]],'weight': [10, 20, 30, 40, 50],'description': ['Edge A', 'Edge A', 'Edge B', 'Edge B', 'Edge C'],'human_readable_id': ['A1', 'A2', 'B1', 'B2', 'C1'],'id': [1, 2, 3, 4, 5]
}df = pd.DataFrame(data)
print(df)

输出:

  edge_key source target text_unit_ids  weight description human_readable_id  id
0        A      X      P        [1, 2]      10     Edge A              A1   1
1        A      X      P           [3]      20     Edge A              A2   2
2        B      Y      Q           [4]      30     Edge B              B1   3
3        B      Y      Q        [5, 6]      40     Edge B              B2   4
4        C      Z      R           [7]      50     Edge C              C1   5

我们希望对 edge_key 进行分组,并进行以下操作:

  1. sourcetarget 取第一行的值。
  2. text_unit_ids 合并为一个列表。
  3. weight 求和。
  4. description 拼接为一个字符串。
  5. human_readable_idid 取第一行的值。

代码如下:

def _aggregate_text_unit_ids(x):return [item for sublist in x for item in sublist]def _add_quotes(s):return f'"{s}"'updated_edges_df = df.groupby('edge_key').agg(source=('source', 'first'),target=('target', 'first'),text_unit_ids=('text_unit_ids', _aggregate_text_unit_ids),weight=('weight', 'sum'),description=('description', lambda x: ''.join(x.apply(_add_quotes))),human_readable_id=('human_readable_id', 'first'),id=('id', 'first'),
).reset_index(drop=True)print(updated_edges_df)

输出:

  source target text_unit_ids  weight description human_readable_id  id
0      X      P     [1, 2, 3]      30  "Edge A""Edge A"              A1   1
1      Y      Q  [4, 5, 6]       70  "Edge B""Edge B"              B1   3
2      Z      R        [7]       50        "Edge C"              C1   5

6. 总结

通过本文,我们学习了 groupbyagg 的基本用法,以及如何结合 firstsumlambdareset_index 来实现复杂的数据处理。这些功能在数据分析和处理中非常实用,能够帮助我们高效地完成任务。

希望这篇文章能帮助你更好地理解和使用 groupbyagg。如果你有任何问题或想了解更多,欢迎在评论区留言!

Happy Coding! 🚀

相关文章:

深入解析 `DataFrame.groupby` 和 `agg` 的用法及使用场景

深入解析 DataFrame.groupby 和 agg 的用法及使用场景 1. groupby 的基本用法语法:示例: 2. agg 的基本用法语法:示例: 3. first、sum、lambda 的用法3.1 first示例: 3.2 sum示例: 3.3 lambda示例&#xff…...

MySQL 的锁

MySQL有哪些锁?各种锁的作用与使用场景全局锁表级锁表锁元素锁意向锁AUTO-INC 锁 行级锁记录锁间隙锁临键锁 其他共享锁排他锁乐观锁悲观锁 MySQL有哪些锁? 全局锁表级锁 a. 表锁 b. 元素锁 c. 意向锁 d. AUTO-INC 锁行级锁 a. 记录锁 b. 间隙锁 c. 临键锁 各种锁的作用与使…...

二、使用langchain搭建RAG:金融问答机器人--数据清洗和切片

选择金融领域的专业文档作为源文件 这里选择 《博金大模型挑战赛-金融千问14b数据集》,这个数据集包含若干公司的年报,我们将利用这个年报搭建金融问答机器人。 具体下载地址 这里 git clone https://www.modelscope.cn/datasets/BJQW14B/bs_challenge_…...

【Linux】-- linux 配置用户免密登录本机

比如我们要配置用户 app_tom 免密登录本机(SSH 登录自己机器时无需输入密码),你可以按照以下步骤操作: 步骤 1:切换到 app_tom 用户 首先,确保你已经以 app_tom 用户登录,或者切换到该用户&…...

泷羽sec学习打卡-brupsuite8伪造IP和爬虫审计

声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都 与本人无关,切莫逾越法律红线,否则后果自负 关于brupsuite的那些事儿-Brup-FaskIP 伪造IP配置环境brupsuite导入配置1、扩展中先配置python环境2、安…...

【uniapp蓝牙】基于native.js链接ble和非ble蓝牙

【uniapp蓝牙】基于native.js链接ble和非ble蓝牙 uniapp不是仅支持低功耗蓝牙(基础蓝牙通讯不支持),有些可能需要基础蓝牙。我现在同步我的手机蓝牙列表低功耗,基础蓝牙都支持 /*** author wzj* 通用蓝牙模块封装* 搜索 ble 和非…...

.NET Core 各版本特点、差异及适用场景详解

随着 .NET Core 的不断发展,微软推出了一系列版本来满足不同场景下的开发需求。这些版本随着时间的推移逐渐演变为统一的 .NET 平台(从 .NET 5 开始)。本文将详细说明每个版本的特点、差异以及适用场景,帮助开发者更好地选择和使用…...

Linux中自动检测并定时关闭KDialog程序

自动检测并关闭对话框的程序示例 创建并打开KDialog的脚本自动检测并定时关闭KDialog的脚本 创建并打开KDialog的脚本 #!/bin/bash kdialog --msgbox "demo"自动检测并定时关闭KDialog的脚本 #!/bin/bash# Continuously check for kdialog dialog while true; do# …...

CSS学习记录12

CSS浮动 CSSfloat属性规定元素如何浮动 CSSclear属性规定哪些元素可以在清除的元素旁边以及在哪一侧浮动。 float属性 float属性用于定位和格式化内容,例如让图像向左浮动到容器的文本那里。 float属性可以设置以下值之一: left - 元素浮动到其容器…...

【Java基础面试题016】JavaObject类中有什么主要方法,作用是什么?

equals() 作用:用于比较两个对象是否相等。默认实现比较对象的内存地址,即判断两个引用是否指向同一个对象 使用:通常会重写此方法来比较对象的内容 hashCode() 作用:返回对象的哈希值,用整数表示对象。 使用&…...

实践环境-docker安装mysql8.0.40步骤

一、docker安装mysql 8.0.40版本 1、检索镜像版本 docker search mysql:8.0.40 NAME DESCRIPTION STARS OFFICIAL mysql MySQL is a widely used, open-source relation… …...

边缘智能创新应用大赛获奖作品系列一:智能边缘计算✖软硬件一体化,开启全场景效能革命新征程

边缘智能技术快速迭代,并与行业深度融合。它正重塑产业格局,催生新产品、新体验,带动终端需求增长。为促进边缘智能技术的进步与发展,拓展开发者的思路与能力,挖掘边缘智能应用的创新与潜能,高通技术公司联…...

决策树的生成与剪枝

决策树的生成与剪枝 决策树的生成生成决策树的过程决策树的生成算法 决策树的剪枝决策树的损失函数决策树的剪枝算法 代码 决策树的生成 生成决策树的过程 为了方便分析描述,我们对上节课中的训练样本进行编号,每个样本加一个ID值,如图所示…...

蓝桥杯算法训练 黑色星期五

题目描述 有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不太吉利,用古人的说法,就是“诸事不宜”。请你编写一个程序,统计出在某个特定的年份中,出现了多少次既是13号又是星期五的情形&am…...

MySQL存储引擎-存储结构

Innodb存储结构 Buffer Pool(缓冲池):BP以Page页为单位,页默认大小16K,BP的底层采用链表数据结构管理Page。在InnoDB访问表记录和索引时会在Page页中缓存,以后使用可以减少磁盘IO操作,提升效率。 ○ Page根据状态可以分…...

理解torch函数bmm

基本信息 功能描述 torch.bmm 是 PyTorch 中的一个函数,用于执行批量矩阵乘法(Batch Matrix Multiplication)。它适用于处理一批矩阵的乘法操作,特别适合于深度学习任务中的场景,比如卷积神经网络中的某些层。 参数…...

2024 年的科技趋势

2024 年在科技领域有着诸多重大进展与突破。从人工智能、量子计算到基因组医学、可再生能源以及新兴技术重塑了众多行业。随着元宇宙等趋势的兴起以及太空探索取得的进步,未来在接下来的岁月里有望继续取得进展与突破。让我们来探讨一下定义 2024 年的一些关键趋势&…...

win服务器的架设、windows server 2012 R2 系统的下载与安装使用

文章目录 windows server 2012 R2 系统的下载与安装使用1 windows server 2012 的下载2 打开 VMware 虚拟机软件(1)新建虚拟机(2)设置虚拟机(3)打开虚拟机 windows server 2012(4)进…...

leetcode45.跳跃游戏II

标签:动态规划 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i j] 处:返回到达 nums[n - 1] 的最小跳跃次数。…...

边缘智能创新应用大赛获奖作品系列三:边缘智能强力驱动,机器人天团花式整活赋能千行百业

边缘智能技术快速迭代,并与行业深度融合。它正重塑产业格局,催生新产品、新体验,带动终端需求增长。为促进边缘智能技术的进步与发展,拓展开发者的思路与能力,挖掘边缘智能应用的创新与潜能,高通技术公司联…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...

什么是VR全景技术

VR全景技术&#xff0c;全称为虚拟现实全景技术&#xff0c;是通过计算机图像模拟生成三维空间中的虚拟世界&#xff0c;使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验&#xff0c;结合图文、3D、音视频等多媒体元素…...