一周学会Pandas2之Python数据处理与分析-Pandas2数据分组与聚合

article/2025/8/4 18:26:04

锋哥原创的Pandas2 Python数据处理与分析 视频教程:  

2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili

Pandas 的分组与聚合功能是数据分析的核心工具,允许你根据特定条件分割数据,然后对每个子集应用计算函数。下面我将全面介绍相关知识点和方法:

核心概念

  1. 分组 (Grouping):根据一个或多个键(可以是列名、函数、数组等)将数据分割为多个子集

  2. 聚合 (Aggregation):对每个分组应用计算函数(如 sum, mean, count)

  3. 转换 (Transformation):对每个分组执行操作,返回与原始数据相同形状的结果

  4. 过滤 (Filtration):根据分组统计信息筛选数据子集

groupby()分组方法

pandasgroupby() 方法是数据处理中的核心功能,用于按指定条件分组数据,再对每个组执行聚合、转换或过滤操作。以下是详细解析:

基础语法:

grouped = df.groupby(by=None, axis=0, level=None, as_index=True, sort=True)
  • by: 分组依据(列名、函数、字典、Series等)

  • axis: 0 按行分组(默认),1 按列分组

  • as_index: 是否将分组列作为结果索引(默认 True

  • sort: 是否对分组键排序(默认 True

分组依据的常见形式

1, 按单列分组

grouped = df.groupby('Category')

2,按多列分组

grouped = df.groupby(['Year', 'Month'])

3,按函数分组

# 按姓名长度分组
grouped = df.groupby(lambda x: len(df.loc[x, 'Name']))

4,按字典/Series映射分组

mapping = {'A': 'Group1', 'B': 'Group1', 'C': 'Group2'}
grouped = df.groupby(mapping)

常用操作类型

1,聚合(Aggregation):返回每组汇总结果

# 单列聚合
result = grouped['Price'].sum()
​
# 多列多函数聚合
result = grouped.agg({'Price': ['sum', 'mean'],'Quantity': 'max'
})

常用聚合函数:sum(), mean(), max(), min(), count(), std(), var(), describe()

2,转换(Transformation):返回与原始数据相同大小的结果

# 计算每组的Z-Score
zscore = lambda x: (x - x.mean()) / x.std()
df['Z-Score'] = grouped['Price'].transform(zscore)

3,过滤(Filtration):按条件筛选组

# 保留销售额>1000的组
filtered = grouped.filter(lambda g: g['Sales'].sum() > 1000)

示例:

import pandas as pd
​
data = {'Category': ['A', 'B', 'A', 'C', 'B', 'C'],'Price': [100, 150, 200, 50, 300, 250],'Quantity': [3, 2, 5, 4, 1, 2]
}
df = pd.DataFrame(data)
​
# 分组并计算平均价格和总销量
result = df.groupby('Category').agg(Avg_Price=('Price', 'mean'),Total_Quantity=('Quantity', 'sum')
)
​
print(result)

agg()聚合方法

前面已经介绍过。

transform()转换方法

前面已经介绍过。

GroupBy 的 filter() - 基于分组条件筛选

基本语法:

DataFrameGroupBy.filter(func, dropna=True, *args, **kwargs)

参数说明:

参数说明
func自定义函数,接收分组对象,返回布尔值表示是否保留该组
dropna是否删除结果中的 NaN 值(默认为 True)

使用场景:

  • 筛选出满足特定条件的分组(如:组内数据量大于阈值)

  • 保留符合统计条件的组(如:组平均值大于某值)

  • 基于分组特征进行数据清洗

使用实例:

import pandas as pd
​
# 创建示例数据
sales_data = {'Region': ['East', 'West', 'East', 'West', 'East', 'West'],'Salesperson': ['Alice', 'Bob', 'Charlie', 'David', 'Eva', 'Frank'],'Sales': [1200, 800, 1500, 900, 1300, 700]
}
df = pd.DataFrame(sales_data)
​
# 按地区分组
grouped = df.groupby('Region')
​
​
# 筛选出总销售额超过 3000 的地区
def total_sales_filter(group):return group['Sales'].sum() > 3000
​
​
filtered_df = grouped.filter(total_sales_filter)

常用筛选条件

# 保留组内元素超过2个的分组
df.groupby('Region').filter(lambda x: len(x) > 2)
​
# 保留平均销售额大于1000的组
df.groupby('Region').filter(lambda x: x['Sales'].mean() > 1000)
​
# 保留有销售冠军(单人销售额>1400)的组
df.groupby('Region').filter(lambda x: x['Sales'].max() > 1400)

复杂条件筛选

# 保留销售额标准差小于200的稳定销售区域
df.groupby('Region').filter(lambda g: g['Sales'].std() < 200)
​
# 保留所有销售员都超过800销售额的区域
df.groupby('Region').filter(lambda g: (g['Sales'] > 800).all())


http://www.hkcw.cn/article/mVPMmFQLpZ.shtml

相关文章

零基础上手 Cherry Studio:打造专属 AI 助手的第一步

名人说&#xff1a;博观而约取&#xff0c;厚积而薄发。——苏轼《稼说送张琥》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、Cherry Studio是什么&#xff1f;为什么选择它&#xff1f;1.Cherry Studio简介…

API平台(API网关)之API编排

支持WEB可视化的API编排能力&#xff0c;内置基本组件、流程控制、报文转换以及其他类型的组件&#xff0c;通过可视化拖、拉、拽对API进行编排和调度&#xff0c;支持Restful API、WebService、JAVA等多协议转换混合编排和API服务聚合能力&#xff0c;满足复杂业务场景的API支…

初识PS(Photoshop)

初识PS&#xff08;Photoshop&#xff09; 1、Photoshop界面 2、常用快捷键

鸿蒙ArkTS | Badge 信息标记组件自学指南

在做 UI 设计时&#xff0c;我们经常会碰到这样一个需求&#xff1a;要在某个图标、按钮或列表项的角落加一个小小的提示&#xff0c;比如红点、新消息数量、状态标签之类的。这时候就轮到 ​​Badge​​ 组件登场了。 如果你想要一个简单优雅、可配置灵活的信息标记功能&…

【C++】cin和cout的性能问题讨论和优化方法

目录 1、背景知识2、ios::sync_with_stdio(false)2.1 **作用**2.2 原理2.3 注意事项 3、cin.tie(0)3.1 作用3.2 原理3.3 注意事项 4、代码演示5、实例操作5.1 创建数据文件5.2 进行代码演示 个人主页<—请点击 C专栏<—请点击 1、背景知识 在 C 中&#xff0c;标准输⼊输…

【数据结构】图的存储(十字链表)

弧节点 tailvex数据域&#xff1a;存储弧尾一端顶点在顺序表中的位置下标&#xff1b;headvex 数据域&#xff1a;存储弧头一端顶点在顺序表中的位置下标&#xff1b;hlink 指针域&#xff1a;指向下一个以当前顶点作为弧头的弧&#xff1b;tlink 指针域&#xff1a;指向下一个…

(二)微服务(grpc/grpc消费者)

文章目录 项目地址一、grpc介绍1.1 项目初始化1. 创建grpc项目2. 项目结构二、Discount grpc创建2.1 实体层1. Coupon实体2.2 Protos1. 创建discount.proto2. 配置proto3. 创建DiscountService4. Program里注册服务2.3 Seed 数据1. 创建表和Seed数据2. 自动migration2.4 更新Do…

机电的焊接技术

焊接技术:高温或高压条件下,使用焊接材料(焊条或焊丝)将两块或两块以上的母材(待焊接的工件)连接 成一个整体的操作方法&#xff61; 2.3.1 焊接设备和焊接材料的分类及选用 1.焊接设备&#xff08;对应焊接方法&#xff09; 2.焊接材料&#xff08;焊条、焊丝、焊剂、焊接气…

Ⅰ.计算机二级选择题(C语言概述)

【注&#xff1a;重点题以及添加目录格式导航&#xff01;&#xff01;&#xff01;】 【重点】&#xff08;第2题&#xff09; 【重点】&#xff08;第8题&#xff09; 【重点】&#xff08;第17题&#xff09; 【重点】&#xff08;第19题&#xff09; 【重点】&#xff08;第…

ck-editor5的研究 (4):初步使用 CKEditor5 的插件功能

前言 在上一篇文章中—— ck-editor5 的研究&#xff08;3&#xff09;&#xff1a;初步使用 CKEditor5 的事件系统和API &#xff0c;我们已经初步了解了 CKEditor5 的工作方式 那么这篇文章&#xff0c;我们将初步使用 CKEditor5 的插件功能&#xff0c;我将会写一个自己的…

分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类

分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类 目录 分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类分类效果功能概述程序设计参考资料 分类效果 功能概述 代码功能 该MATLAB代码实现了一个结合CNN、LSTM和注意力机制的高光谱数据分类模型&#xff0c;核心…

嵌入式项目之mini2440系统制作烧写

系统移植的必要性与组成 在嵌入式开发中&#xff0c;**系统移植&#xff08;Linux 系统定制&#xff09;** 是常见的需求&#xff0c;主要原因在于&#xff1a; 1. **官方镜像体积过大**&#xff1a;标准 Linux 发行版&#xff08;如 Ubuntu&#xff09;可能占用数 GB 存储…

OpenShift AI - 启用过时版本的 Notebook 镜像

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在 OpenShift 4.18 OpenShift AI 2.19 的环境中验证 文章目录 查看可用 Notebook 镜像控制台查看命令行查看 Notebook 镜像和 Image Stream 对应关系启用老版本的 Notebook 镜像参考 查看可用 Notebook 镜…

“人单酬“理念:财税行业的自我驱动革命

引言&#xff1a;当薪酬不再是"固定数字"&#xff0c;而是"成长标尺" "为什么有人拼命工作却收入停滞&#xff1f;为什么企业总在人才流失中挣扎&#xff1f;"这些问题背后&#xff0c;往往隐藏着传统薪酬体系的僵化。而"人单酬"&…

yolo目标检测助手:具有模型预测、图像标注功能

在人工智能浪潮席卷各行各业的今天&#xff0c;计算机视觉模型&#xff08;如 YOLO&#xff09;已成为目标检测领域的标杆。然而&#xff0c;模型的强大能力需要直观的界面和便捷的工具才能充分发挥其演示、验证与迭代优化的价值。为此&#xff0c;我开发了一款基于 WPF 的桌面…

Spring Ai 从Demo到搭建套壳项目(一)初识与实现与deepseek对话模式

前言 为什么说Java长青&#xff0c;主要是因为其生态圈完善&#xff0c;Spring又做了一款脚手架&#xff0c;把对接各个LLM厂商的sdk做了一遍&#xff0c;形成一系列的spring-ai-starter-** 的依赖。 目前为止版本去到1.0.0.M6&#xff0c;golang跟不上了吧&#xff0c; Make …

机器学习实验七--SVM垃圾邮件分类器

SVM垃圾邮件分类器 一、什么是SVM二、实例&#xff1a;垃圾邮件分类器1.实验要求2.原理解释2.1 数据预处理流程2.2 特征提取方法2.3 SVM分类器 3.代码实现4.实验结果5.实验总结 一、什么是SVM 支持向量机(Support Vector Machine, SVM)是一种监督学习算法&#xff0c;主要用于…

lidar和imu的标定(一)Robust Real-time LiDAR-inertial Initialization

一、Robust Real-time LiDAR-inertial Initialization 看了这篇文章。在方法中&#xff0c;A和B都不细看了。主要看后边的几个部分。 C. LiDAR-inertial Initialization 在这一部分中&#xff0c; 1) Data Preprocess:主要是准备数据。 1.雷达里程计之后&#xff0c;可以得…

【手写系列】手写线程池

PS&#xff1a;本文的线程池为演示 Demo&#xff0c;皆在理解线程池的工作原理&#xff0c;并没有解决线程安全问题。 最简单一版的线程池 public class MyThreadPool {// 存放线程&#xff0c;复用已创建的线程List<Thread> threadList new ArrayList<>();publ…

Git企业级项目管理实战

目录 1. 准备工作 2. 添加成员 2.1 添加企业成员 2.2 添加项目成员 2.3 添加仓库开发人员 3. 开发场景 - 基于git flow模型的实践 3.1 新需求加入 3.2 修复测试环境 Bug 3.3 修改预发布环境Bug 3.4 修改正式环境 Bug 3.5 紧急修复正式环境 Bug 4. 拓展阅读 4.1 其…