Excel 分组后计算

article/2025/9/10 13:04:23

Excel 可以对数据进行分组汇总,也可以用透视表对数据进行多层次分析,但提供的汇总及相关运算都很简单,稍复杂一些的运算没法实现或者很难实现了。比如我们希望计算分组内的排名,按分组汇总值再过滤与排序等。本文将列出这类分组后计算示例,解答并给出 SPL 解决代码。SPL 是专业计算引擎 esProc 使用的语言,用于处理结构化数据的运算非常方便。

一、组内排序

这里以学生的考试成绩表为例,现在需要对每门课程进行单科排名。显然这时需要先按课程分组,然后再在组内进行排序。

Excel 文件中数据如下:

..

期望结果:

..

本文中 SPL 示例,都通过剪贴板跟 Excel 进行数据交互。在集算器设计器里编辑好 SPL 脚本后,需要先从 Excel 中将要分析的数据复制到剪贴板,然后才执行代码,执行完成后,再到 Excel 中粘贴结果。

使用 SPL 能分步计算,步骤也很简单:

 AB
1=clipboard().import@t()/从剪贴板导入带标题的考试成绩表
2=A1.group(Subject)/先按科目将成绩分组
3=A2.(~.sort(Score:-1))/然后对每一组的数据按成绩升序排列
4=A3.(~.derive(#:Rank))/为每组数据增加一个名次字段
5=A4.conj()/合并排好序后的各组成绩
6=A5.new(Subject,Rank,Score,Name)/用新序表调整下字段顺序
7=clipboard(A6.export@t())/将排名结果放回到剪贴板

代码执行完成后,只需在Excel 中粘贴便可得到期望结果。

如果仅希望筛选出每门课程的前三名,则只需使用 top 函数在上述分组后的数据中,取出前三名即可。

期望结果:

..

 

SPL 采用 top 函数取出前三名:

 AB
1=clipboard().import@t()/从剪贴板导入带标题的考试成绩表
2=A1.group(Subject)/先按科目将成绩分组
3=A2.(~.top(-3;Score))/直接针对每组数据,根据 Score 过滤出前三名
4=A3.(~.derive(#:Rank))/为每组数据增加一个名次字段
5=A4.conj()/合并排好序后的各组成绩
6=A5.new(Subject,Rank,Score,Name)/用新序表调整下字段顺序
7=clipboard(A6.export@t())/将考生名单放回到剪贴板

执行结束后,在Excel 中粘贴,便可得到期望结果。

二、组后排序

上一节是分组后,对分组内的数据进行各自的排序。现在看一下分组后,如何对整个组的汇总数据来排序。仍以上述学生的考试成绩表为例,但现在想对同学的总分进行一个排名,期望结果为:

..

根据分组后的总分来排序时,需要使用 groups 函数,分组的同时计算出总分:

 AB
1=clipboard().import@t()/从剪贴板导入带标题的考试成绩表
2=A1.groups(Name;sum(Score):Total)/按姓名分组,同时计算出每个同学的总分 Total
3=A2.sort(Total:-1)/对总分按降序排序
4=A3.derive(#:Rank)/增加一个名次字段
5=clipboard(A4.export@t())/排序后的结果导出后放置到剪贴板

 

三、组内过滤

现在需要将成绩落后的学生找出来,给他们补补课。由于各科考试题目的难易不同,所以不适合都按不及格的条件选出。而是根据每门课程的平均分,将平均分以下的同学找出来。

期望结果:

..

此时需要分组后,先算出每一门课程的平均分,然后再将在平均分以下的同学选出来。

SPL 代码如下:

 AB
1=clipboard().import@t()/从剪贴板导入带标题的考试成绩表
2=A1.group(Subject)/先按科目将成绩分组
3=A2.((AVG=~.avg(Score),~.select(Score<AVG)))/对每组数据,先算出平均分,再选出在平均分以下的同学
4=A3.conj()/合并每门课程下的需要补课的同学名单
5=clipboard(A4.export@t())/将学生名单放回到剪贴板

 

四、组后过滤

上一节是找出每门课程中低于平均分的同学。现在按照姓名分组,计算出每个同学的总分后,再将总分平均分以下的同学找出来。

期望结果:

..

由于同样是对分组后的总分来过滤,仍然采用 groups 函数,分组并计算出总分,再按总分求平均以及过滤。

SPL 代码如下:

 AB
1=clipboard().import@t()/从剪贴板导入带标题的考试成绩表
2=A1.groups(Name;sum(Score):Total)/按姓名分组,并计算总分
3=A2.select(Total<A2.avg(Total))/根据总分求出平均分,然后选出总分低于平均分的同学
4=clipboard(A3.export@t())/将结果导出并放置到剪贴板

 

五、组内占比

如下为 2019 年部分国家的 GDP 产值。现在想按地区,也即各大洲分组,然后计算出各国占所在洲的 GDP 百分比。

2019 年部分国家 GDP 数据 (单位:亿美元):

..

期望结果:

..

计算组内的占比,同样是按地区分组后,先算出每个洲的 GDP 总量,再依次计算组内的各成员国的百分比占比。

SPL 代码:

 AB
1=clipboard().import@t()/从剪贴板导入带标题的考试成绩表
2=A1.group(Area)/按地区将各国分组
3=A2.((SUM=~.sum(GDP),~.derive(string(GDP/SUM,"0.00%"):Percentage)))/对每组数据,先算出 GDP 总量,再计算各自的百分比
4=A3.conj()/合并所有组内数据
5=clipboard(A4.export@t())/将结果导出后放回到剪贴板

 

六、组后占比

这一节再来看一下如何计算分组后的各大洲的全球占比。

期望结果:

..

分组后的计算都类似,仍然采用 groups 函数,分组并同时计算出各洲的 GDP 总量,然后再求一遍各洲的 GDP 总量占全球 GDP 的百分比值。

SPL 代码如下:

 AB
1=clipboard().import@t()/从剪贴板导入带标题的考试成绩表
2=A1.groups(Area;sum(GDP):Total)/按地区分组,并计算各大洲的 GDP 总值
3=A2.derive(string(Total/A2.sum(Total),"0.00%"):Percentage)/再计算各洲的总量占全球 GDP 的百分比
4=A3.run(Total=string(Total,"0.00"))/调整下 Total 的显示精度
5=clipboard(A4.export@t())/将结果导出并放置到剪贴板

 

       更多 Excel 的分组分析,请参考《Excel 特殊分组汇总示例》。

另外《SPL Cookbook》中还有更多敏捷计算示例。


http://chatgpt.dhexx.cn/article/Gib98Omj.shtml

相关文章

如何在Excel中对工作表进行分组

If you’re editing multiple worksheets in Microsoft Excel, it might be helpful to group them together. This allows you to make changes to the same range of cells across multiple worksheets. Here’s how to do it. 如果要在Microsoft Excel中编辑多个工作表,将它…

speedoffice表格如何对内容进行分组?

Excel表格中数据较多&#xff0c;怎样能让数据更加直观有条理&#xff0c;只要把表格中的数据进行分组就好了。下面介绍在excel中对表格内容进行分组的方法。 1、打开表格&#xff0c;点击“数据”&#xff0c;选中需要分组的数据&#xff0c; 单击菜单栏“分组”&#xff0c…

springboot+ssm+java校园网上KTV点歌音乐系统

KTV点歌系统的主要使用者分为管理员和用户&#xff0c;实现功能包括管理员&#xff1a;个人中心、用户管理、歌曲库管理、歌曲类型管理、点歌信息管理&#xff0c;用户&#xff1a;个人中心、歌曲库管理、点歌信息管理等功能。由于本网站的功能模块设计比较全面&#xff0c;所以…

基于STM32F103,用蜂鸣器播放歌曲

本文的内容&#xff0c;分为下面几部分&#xff1a; 1&#xff0c;参考网上例程&#xff1b; 2&#xff0c;移植&#xff0c;运行&#xff0c;查看&#xff0c;尽力理解代码&#xff1b; 3&#xff0c;调整测试参数&#xff1b; 4&#xff0c;添加一首歌曲。 下面详…

Django实现音乐网站 ⑷

使用Python Django框架制作一个音乐网站&#xff0c;在系列文章3的基础上继续开发&#xff0c; 本篇主要是后台歌曲类型表、歌单表模块功能开发。 目录 表结构设计 歌曲类型表结构 歌单表结构 创建表模型 创建表 后台注册表模型 引入表模型 后台自定义 总结 表结构设计…

Django计算机毕业设计基于Web的在线音乐网站(程序+lw)Python

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

springboot+jsp云端在线音乐分享平台java

随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;在线音乐平台当然也不能排除在外&#xff0c;从歌曲类型、歌手信息、歌曲信息、音乐资讯的统计和分析&#xff0c;在过程中会产…

计算机毕业设计Node.js+Express音蕾心动(源码+程序+lw+远程调试)

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

计算机毕设Node.js+Vue音蕾心动(程序+LW+部署)

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

基于jsp和ssm架构实现KTV点歌系统演示【附项目源码+论文说明】分享

基于jsp和ssm架构实现KTV点歌系统演示 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#…

Python-Django毕业设计音蕾心动(程序+Lw)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

Python+Django毕业设计音蕾心动(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

基于jsp和ssm架构实现KTV点歌系统演示【附项目源码+论文说明】

基于jsp和ssm架构实现KTV点歌系统演示 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#…

(附源码)计算机毕业设计ssm爱音乐网站

毕设帮助&#xff0c;指导&#xff0c;本源码分享&#xff0c;调试部署(见文末) 3.4系统UML用例分析 3.4.1管理员用例 管理员登录后可进行首页、个人中心、用户管理、热门歌手管理、歌曲类型管理、歌曲信息管理、音乐视频管理、留言板管理、系统管理&#xff0c;管理员用例如…

计算机毕业设计Node.js+Vue基于Web的在线音乐网站(程序+源码+LW+部署)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离…

Python爬虫:想听榜单歌曲?使用BeautifulSoup库只需要14行代码即可搞定

目录 BeautifulSoup库安装BeautifulSoup库BeautifulSoup库简介选择解释器基础用法 节点选择器获取节点名称属性内容获取所有子节点获取所有子孙节点父节点与兄弟节点 方法选择器find_all()方法find()方法 CSS选择器嵌套选择节点获取属性与文本 通过浏览器直接Copy-CSS选择器实战…

【java毕业设计】基于B/S结构+mysql的KTV点歌系统设计与实现(程序源码)-KTV点歌系统

基于B/S结构mysql的KTV点歌系统设计与实现&#xff08;程序源码毕业论文&#xff09; 大家好&#xff0c;今天给大家介绍基于B/S结构mysql的KTV点歌系统设计与实现&#xff0c;本论文只截取部分文章重点&#xff0c;文章末尾附有本毕业设计完整源码及论文的获取方式。更多毕业设…

Django实现音乐网站 ⑽

使用Python Django框架制作一个音乐网站&#xff0c; 本篇主要是后台对歌曲类型、歌单功能原有功能进行部分功能实现和显示优化。 目录 歌曲类型功能优化 新增编辑 优化输入项标题显示 父类型显示改为下拉菜单 列表显示 父类型显示名称 过滤器增加父类型 歌单表功能优化…

原始音频数据合成音频文件_根据音频数据对歌曲类型进行分类

原始音频数据合成音频文件 Over the past few years, streaming services have become the primary means through which most people listen to their favourite music. However, this can mean that users might find it difficult to look for newer music that suits their…