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

模块四-数据转换与操作——28. 分组变换与过滤

28. 分组变换与过滤1. 概述除了聚合agg之外groupby 还支持**变换transform和过滤filter**操作。transform 用于在组内进行元素级运算filter 用于根据组属性筛选组。importpandasaspdimportnumpyasnp# 创建示例数据np.random.seed(42)dfpd.DataFrame({部门:[技术,销售,技术,市场,销售,技术,市场,销售,技术,市场],姓名:[f员工_{i}foriinrange(1,11)],工资:[8000,12000,10000,15000,11000,9500,10500,12500,9000,13000],年龄:[25,30,28,32,35,27,29,31,26,33]})print(原始数据:)print(df)2. transform() 变换2.1 什么是 transformtransform返回与原始数据相同形状的结果而agg返回的是聚合后的结果。# agg 返回聚合结果形状改变agg_resultdf.groupby(部门)[工资].mean()print(agg 结果:)print(agg_result)print(fagg 形状:{agg_result.shape})# transform 返回相同形状transform_resultdf.groupby(部门)[工资].transform(mean)print(\ntransform 结果:)print(transform_result)print(ftransform 形状:{transform_result.shape})2.2 常用 transform 操作# 计算组内均值df[部门平均工资]df.groupby(部门)[工资].transform(mean)print(部门平均工资:)print(df[[部门,姓名,工资,部门平均工资]])# 计算组内标准差df[部门工资标准差]df.groupby(部门)[工资].transform(std)# 计算组内排名df[组内排名]df.groupby(部门)[工资].transform(rank,ascendingFalse)print(\n组内排名:)print(df[[部门,姓名,工资,组内排名]])2.3 标准化Z-Score# 组内标准化df[工资标准化]df.groupby(部门)[工资].transform(lambdax:(x-x.mean())/x.std())print(组内标准化:)print(df[[部门,姓名,工资,工资标准化]])2.4 计算与均值的差值# 计算与组均值的差值df[与均值差额]df[工资]-df.groupby(部门)[工资].transform(mean)print(与均值差额:)print(df[[部门,姓名,工资,与均值差额]])2.5 填充组内缺失值# 创建包含缺失值的数据df_nadf.copy()df_na.loc[[1,5],工资]np.nanprint(包含缺失值的数据:)print(df_na)# 用组内均值填充df_na[工资_filled]df_na.groupby(部门)[工资].transform(lambdax:x.fillna(x.mean()))print(\n填充后:)print(df_na[[部门,工资,工资_filled]])3. filter() 过滤3.1 基本用法filter根据组属性筛选组返回满足条件的组的所有行。# 筛选员工数 3 的部门filtereddf.groupby(部门).filter(lambdax:len(x)3)print(员工数 3 的部门:)print(filtered)# 筛选平均工资 10000 的部门filtereddf.groupby(部门).filter(lambdax:x[工资].mean()10000)print(\n平均工资 10000 的部门:)print(filtered)3.2 条件过滤# 筛选最高工资 12000 的部门filtereddf.groupby(部门).filter(lambdax:x[工资].max()12000)print(有员工工资 12000 的部门:)print(filtered)# 筛选最低工资 9000 的部门filtereddf.groupby(部门).filter(lambdax:x[工资].min()9000)print(\n有员工工资 9000 的部门:)print(filtered)# 筛选工资方差 500000 的部门filtereddf.groupby(部门).filter(lambdax:x[工资].var()500000)print(\n工资方差 500000 的部门:)print(filtered)4. transform vs agg vs filter 对比方法返回值形状用途agg聚合后的形状每组一行计算组统计量transform与原数据相同形状组内元素级运算filter满足条件的组的所有行筛选组# 对比示例print(原始数据形状:,df.shape)print(agg 结果形状:,df.groupby(部门)[工资].mean().shape)print(transform 结果形状:,df.groupby(部门)[工资].transform(mean).shape)print(filter 结果形状:,df.groupby(部门).filter(lambdax:len(x)3).shape)5. 完整示例员工绩效分析# 创建员工数据np.random.seed(42)employeespd.DataFrame({部门:np.random.choice([技术,销售,市场,人事],100),姓名:[f员工_{i}foriinrange(1,101)],工资:np.random.randint(5000,20000,100),绩效分:np.random.uniform(60,100,100).round(1),工龄:np.random.randint(1,15,100)})print(*60)print(员工绩效分析transform filter)print(*60)print(\n原始数据:)print(employees.head())# 1. 添加组内统计列print(\n1. 添加组内统计:)employees[部门平均工资]employees.groupby(部门)[工资].transform(mean)employees[部门平均绩效]employees.groupby(部门)[绩效分].transform(mean)employees[部门人数]employees.groupby(部门)[姓名].transform(count)employees[组内排名]employees.groupby(部门)[绩效分].transform(rank,ascendingFalse)print(employees[[部门,姓名,绩效分,组内排名,部门平均绩效]].head(10))# 2. 计算与平均值的差距print(\n2. 绩效差距分析:)employees[绩效差距]employees[绩效分]-employees[部门平均绩效]print(employees[[部门,姓名,绩效分,部门平均绩效,绩效差距]].head(10))# 3. 筛选部门平均绩效 80print(\n3. 平均绩效 80 的部门:)high_perf_deptsemployees.groupby(部门).filter(lambdax:x[绩效分].mean()80)print(f筛选前行数:{len(employees)})print(f筛选后行数:{len(high_perf_depts)})print(筛选后的部门分布:)print(high_perf_depts[部门].value_counts())# 4. 筛选部门人数 20print(\n4. 人数 20 的部门:)large_deptsemployees.groupby(部门).filter(lambdax:len(x)20)print(large_depts[部门].value_counts())# 5. 标准化绩效分print(\n5. 组内标准化绩效:)employees[标准化绩效]employees.groupby(部门)[绩效分].transform(lambdax:(x-x.mean())/x.std())print(employees[[部门,姓名,绩效分,标准化绩效]].head(10))# 6. 标记优秀员工组内前20%deftop_20_percent(x):thresholdx.quantile(0.8)returnxthreshold employees[是否优秀]employees.groupby(部门)[绩效分].transform(top_20_percent)print(\n6. 各部门优秀员工:)print(employees[employees[是否优秀]][[部门,姓名,绩效分]].head(10))6. transform 常用函数函数说明示例mean()组内均值df.groupby(A)[B].transform(mean)sum()组内和df.groupby(A)[B].transform(sum)std()组内标准差df.groupby(A)[B].transform(std)rank()组内排名df.groupby(A)[B].transform(rank)cumsum()组内累计和df.groupby(A)[B].transform(cumsum)fillna()填充缺失值df.groupby(A)[B].transform(lambda x: x.fillna(x.mean()))自定义函数任意运算df.groupby(A)[B].transform(lambda x: x - x.mean())7. 总结操作方法返回值示例组内均值transform(mean)同形状df.groupby(A)[B].transform(mean)组内排名transform(rank)同形状df.groupby(A)[B].transform(rank)组内标准化transform(lambda x: (x-x.mean())/x.std())同形状df.groupby(A)[B].transform(lambda x: (x-x.mean())/x.std())组内累计transform(cumsum)同形状df.groupby(A)[B].transform(cumsum)筛选组filter(lambda x: condition)满足条件的行df.groupby(A).filter(lambda x: len(x) 3)筛选组均值条件filter(lambda x: x[B].mean() threshold)满足条件的行df.groupby(A).filter(lambda x: x[B].mean() 50)

相关文章:

模块四-数据转换与操作——28. 分组变换与过滤

28. 分组变换与过滤 1. 概述 除了聚合(agg)之外,groupby 还支持**变换(transform)和过滤(filter)**操作。transform 用于在组内进行元素级运算,filter 用于根据组属性筛选组。 impor…...

Godot 4视觉特效速写本:开源粒子与着色器实例库实战指南

1. 项目概述:一个为创作者准备的视觉特效“速写本”如果你是一位游戏开发者、独立创作者,或者对实时视觉特效(VFX)充满热情,那么你很可能和我一样,在寻找灵感和实现效果之间反复横跳。我们常常在社交媒体上…...

PolyWin 多融易|预测赛道的崛起:当人工智能体开始理解未来

PolyWin 多融易|预测赛道的崛起:当人工智能体开始理解未来过去十年,互联网行业经历了从移动支付、数字资产、去中心化金融到人工智能的多轮变革。每一次技术升级,都会带来新的商业模式,也会重新定义市场对于“信息、数…...

跨越语言障碍的智能方案:DeepL Chrome扩展助力无缝多语言浏览

跨越语言障碍的智能方案:DeepL Chrome扩展助力无缝多语言浏览 【免费下载链接】deepl-chrome-extension A DeepL Translator Chrome extension 项目地址: https://gitcode.com/gh_mirrors/de/deepl-chrome-extension 想象一下,当你浏览外文网页时…...

品牌如何通过AI搜索优化构建长期影响力?GEO战略资产打造可持续竞争壁垒

摘要品牌通过AI搜索优化(GEO)构建长期影响力与权威认知,关键在于将其从短期获客技术升级为沉淀知识、构建AI信任机制的战略资产。核心路径是持续向AI模型提供高质量、结构化的品牌知识,使其成为AI的“可信信源”,并主动…...

STM32F407 CCMRAM实战:释放LVGL图形库的RAM压力

1. 为什么需要CCMRAM优化LVGL性能 第一次用STM32F407做带屏项目时,我被RAM不足的问题折腾得够呛。当时用LVGL显示320x240的界面,刚加上第二个页面就频繁出现HardFault。用CubeMX生成的默认内存配置,128KB的RAM被各种变量瓜分后,留…...

别再只拖控件了!VisionPro ToolBlock高级脚本入门:从变量声明到自定义运行记录的完整流程

别再只拖控件了!VisionPro ToolBlock高级脚本入门:从变量声明到自定义运行记录的完整流程 在工业视觉检测领域,拖拽式图形界面曾让无数工程师快速入门,但当项目复杂度攀升时,那些隐藏在控件背后的脚本能力才是真正的效…...

Task发展历程:从简单任务运行器到现代自动化工具的完整演进史

Task发展历程:从简单任务运行器到现代自动化工具的完整演进史 【免费下载链接】task A fast, cross-platform build tool inspired by Make, designed for modern workflows. 项目地址: https://gitcode.com/gh_mirrors/ta/task Task是一个快速、跨平台的构建…...

如何3步永久保存QQ空间十年回忆:GetQzonehistory数据备份实战指南

如何3步永久保存QQ空间十年回忆:GetQzonehistory数据备份实战指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字记忆时代,QQ空间承载了无数人的青春印记…...

2024年第二季度:10款必装的Hyper终端增强插件终极推荐

2024年第二季度:10款必装的Hyper终端增强插件终极推荐 【免费下载链接】awesome-hyper 🖥 Delightful Hyper plugins, themes, and resources 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-hyper Hyper终端作为一款基于Electron构建的现…...

WebToEpub:3分钟将网页小说转为专业EPUB电子书的完整指南

WebToEpub:3分钟将网页小说转为专业EPUB电子书的完整指南 【免费下载链接】WebToEpub A simple Chrome (and Firefox) Extension that converts Web Novels (and other web pages) into an EPUB. 项目地址: https://gitcode.com/gh_mirrors/we/WebToEpub 还在…...

终极指南:Task代码审查的10个质量控制最佳实践

终极指南:Task代码审查的10个质量控制最佳实践 【免费下载链接】task A fast, cross-platform build tool inspired by Make, designed for modern workflows. 项目地址: https://gitcode.com/gh_mirrors/ta/task Task作为一款受Make启发的现代化构建工具&am…...

如何用ChatGPT进行金融数据分析:从入门到实战的完整指南

如何用ChatGPT进行金融数据分析:从入门到实战的完整指南 【免费下载链接】awesome-chatgpt-zh ChatGPT 中文指南🔥,ChatGPT 中文调教指南,指令指南,应用开发指南,精选资源清单,更好的使用 chatG…...

如何用raylib在3天内构建跨平台游戏应用?

如何用raylib在3天内构建跨平台游戏应用? 【免费下载链接】raylib A simple and easy-to-use library to enjoy videogames programming 项目地址: https://gitcode.com/GitHub_Trending/ra/raylib raylib是一个专为游戏开发设计的轻量级跨平台框架&#xff…...

终极指南:Spring事务传播机制详解——7种行为+实战案例

终极指南:Spring事务传播机制详解——7种行为实战案例 【免费下载链接】CodeGuide :books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总,旨在为大家提供一个清晰详细的学习教程,侧重点更倾向编写Java核心内容。如果…...

如何打造高转化率的Primer CSS营销链接:CTA与导航链接设计指南

如何打造高转化率的Primer CSS营销链接:CTA与导航链接设计指南 【免费下载链接】css Primer is GitHubs design system. This is the CSS implementation 项目地址: https://gitcode.com/gh_mirrors/cs/css Primer CSS作为GitHub的官方设计系统,提…...

STM32F4用HAL库驱动MPU6050,从引脚重映射到数据读取的保姆级避坑指南

STM32F4 HAL库驱动MPU6050全流程实战:从引脚重映射到数据解析的深度避坑指南 第一次接触STM32F4和MPU6050的组合时,我花了整整三天时间才让传感器吐出第一个有效数据。不是I2C通信失败,就是数据全为零,最崩溃的是明明按照教程操作…...

LinkSwift:九大网盘直链下载助手的终极技术解析与实践指南

LinkSwift:九大网盘直链下载助手的终极技术解析与实践指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / …...

ChatGPT Google Extension容器化部署终极指南:Docker与CI/CD完全集成方案

ChatGPT Google Extension容器化部署终极指南:Docker与CI/CD完全集成方案 【免费下载链接】chatgpt-google-extension This project is deprecated. Check my new project ChatHub: 项目地址: https://gitcode.com/gh_mirrors/ch/chatgpt-google-extension 在…...

将Hermes Agent工具连接到Taotoken的配置要点详解

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 将Hermes Agent工具连接到Taotoken的配置要点详解 Hermes Agent 是一款支持自定义模型提供方的智能体开发工具。通过将其后端连接到…...

PHPExcel样式继承机制:减少代码冗余的终极指南

PHPExcel样式继承机制:减少代码冗余的终极指南 【免费下载链接】PHPExcel ARCHIVED 项目地址: https://gitcode.com/gh_mirrors/ph/PHPExcel 在处理Excel文件时,重复设置单元格样式不仅耗时还会导致代码臃肿。PHPExcel作为一款强大的PHP电子表格处…...

React Styleguidist权限控制终极指南:如何实现私有组件文档访问限制

React Styleguidist权限控制终极指南:如何实现私有组件文档访问限制 【免费下载链接】react-styleguidist Isolated React component development environment with a living style guide 项目地址: https://gitcode.com/gh_mirrors/re/react-styleguidist R…...

告别金融数据壁垒:如何用AKTools一键打通多语言财经数据接口

告别金融数据壁垒:如何用AKTools一键打通多语言财经数据接口 【免费下载链接】aktools AKTools is an elegant and simple HTTP API library for AKShare, built for AKSharers! 项目地址: https://gitcode.com/gh_mirrors/ak/aktools 还在为不同编程语言获取…...

BilibiliDown:专业级B站视频下载工具,高效构建个人媒体库

BilibiliDown:专业级B站视频下载工具,高效构建个人媒体库 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.co…...

录播姬:如何轻松录制mikufans直播并解决常见问题?

录播姬:如何轻松录制mikufans直播并解决常见问题? 【免费下载链接】BililiveRecorder 录播姬 | mikufans 生放送录制 项目地址: https://gitcode.com/gh_mirrors/bi/BililiveRecorder 录播姬是一款专为mikufans直播平台设计的开源录制工具&#x…...

如何快速上手MuseTalk:从零开始的实时高质量唇语同步完整指南

如何快速上手MuseTalk:从零开始的实时高质量唇语同步完整指南 【免费下载链接】MuseTalk MuseTalk: Real-Time High Quality Lip Synchorization with Latent Space Inpainting 项目地址: https://gitcode.com/gh_mirrors/mu/MuseTalk 想要为静态人物图像添加…...

如何快速完成Windows系统部署:高效自动化工具完整指南

如何快速完成Windows系统部署:高效自动化工具完整指南 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool.bat Wind…...

Django 模板(Template):告别硬编码,实现动态 HTML页面

IT策士 10余年一线大厂经验&#xff0c;专注 IT 思维、架构、职场进阶。 当你开始构建一个真正的 Web 应用时&#xff0c;很快就会厌倦这种方式&#xff1a; def home(request):return HttpResponse("<h1>欢迎&#xff0c;张三&#xff01;</h1><p>今天…...

CSS如何实现固定页脚布局_利用calc计算高度差

最可靠的页脚固定方案是Flexbox&#xff1a;外层容器设min-height: 100vh和display: flex、flex-direction: column&#xff0c;main加flex: 1&#xff0c;footer保持自然高度&#xff0c;并重置body { margin: 0 }。页脚卡在底部但内容少时被顶上去这是 position: fixed 最常见…...

WebToEpub:3分钟将网页小说转为EPUB电子书的终极解决方案

WebToEpub&#xff1a;3分钟将网页小说转为EPUB电子书的终极解决方案 【免费下载链接】WebToEpub A simple Chrome (and Firefox) Extension that converts Web Novels (and other web pages) into an EPUB. 项目地址: https://gitcode.com/gh_mirrors/we/WebToEpub 还在…...