网站首页 > 技术文章 正文
今天给大家带来一个实际问题,统计每个人指定费用的问题,主要是数据源不规范,不能直接聚合得到结果;题目来源网络,函数公式完全是个人花时间写的。
这个问题,我们主要是两个步骤,规范数据源和聚合;具体来看看数据源和所需结果。
这里是统计所有人的生活费合计,当然了,也可以统计其他项目费用。下面给出我的两种方法,直接上函数公式咯!
方法一:
=LET(a,A1:E32,b,TOCOL(IF(a="姓名",ROW(a),NA()),2),r,HSTACK(b,VSTACK(DROP(b,1)-1,ROWS(a))),c,TOCOL(IF(a="生活费",COLUMN(a),NA()),2),d,DROP(REDUCE("",SEQUENCE(ROWS(c)),LAMBDA(x,y,VSTACK(x,CHOOSECOLS(DROP(TAKE(a,INDEX(r,y,2)),INDEX(r,y,1)),1,INDEX(c,y))))),1),GROUPBY(TAKE(d,,1),TAKE(d,,-1),SUM,,0))
这个公式里,a表示数据源区域;b表示提取姓名所在行,r表示的是每一块数据,也就是两个姓名之间的数据,第一块是第一行到第七行,第二块是第8行到第十四行……;c表示生活费所在各个块的列数,d是得到所有的姓名和对应的生活费数据,也就是规范后的用于聚合的数据,这里很巧妙的运用了Excel函数解题三大思想中的索引和错位,另外一种是行列。
方法二:
=LET(a,A1:E32,f,LAMBDA(ch,BYROW(DROP(REDUCE("",SEQUENCE(COLUMNS(a)),LAMBDA(x,y,HSTACK(x,IF(INDEX(a,,y)=ch,y,"")))),,1),CONCAT)),g,LAMBDA(ar,SCAN(0,ar,LAMBDA(x,y,IF(y<>"",y,x)))),rc,HSTACK(g(f("姓名")),g(f("生活费"))),s,INDEX(a,SEQUENCE(ROWS(a)),rc),GROUPBY(TAKE(s,,1),TAKE(s,,-1),SUM,,0,,TAKE(s,,1)<>"姓名"))
这个公式中,通过自定义函数f和g,f提取姓名列和生活费所在列的列号,函数g补全列号并堆叠得到一个和数据源a一样行数的数据rc,然后根据rc得到我们需要的数据,也就是姓名和生活费两列数据s,之后就是和方法一一样,用groupby函数聚合,相比之下,方法一不需要筛选。
就这个问题,解决办法绝不是这两种,还有很多;下面给出两位大神的解法。
飞机大神的解法:
=LET(a,A1:E32,rindex,SEQUENCE(ROWS(a)),cindex,SCAN(0,BYROW(a,LAMBDA(x,MATCH("生活费",x,0))),LAMBDA(x,y,IF(ISNA(y),x,y))),data,INDEX(a,rindex,HSTACK(rindex^0,cindex)),GROUPBY(TAKE(data,,1),TAKE(data,,-1),SUM,0,0,,TAKE(data,,1)<>"姓名"))
佚名大神的解法:
=HSTACK(I4:I7,MAP(I4:I7,LAMBDA(j,SUM((WRAPCOLS(SCAN(,TOCOL(C$3:F$34,,1),LAMBDA(X,Y,IF(Y>"",Y,X))),32)="生活费")*(B$3:B$34=j)*N(+C$3:F$34)))))
飞机大神的解法拆解开也还可以理解,通过行列索引得到姓名和生活费对应数据;佚名(真不知道这位大神叫什么)大神的解法很费劲,我是不理解的,聪明的你可以留下解析,那就万分感谢了。
都到这里了,你确定不留下你的解法吗?
- 上一篇: 学霸称霸江湖秘笈_学霸称号
- 下一篇: 跟我学量化选股之5:构建模型_股票量化建模
猜你喜欢
- 2025-09-14 微信小程序实现蓝牙打印小票功能_蓝牙小票打印软件
- 2025-09-14 一篇文章就够!ArrayList源码分析及扩容机制
- 2025-09-14 Day261:DataLoader 和 Dataset_dataloader函数
- 2025-09-14 为啥count(*)会这么慢?别再被公众号误导了!
- 2025-09-14 电子表格函数入门(5)- 查找函数INDEX和MATCH组合
- 2025-09-14 Python数据分析笔记#8.1 层次化索引
- 2025-09-14 看完这篇ArrayList,offer还不来?
- 2025-09-14 选数【Python和C++实现】_选择语句python
- 2025-09-14 笔试编程 | 二分查找、数组、排序
- 2025-09-14 跟我学量化选股之5:构建模型_股票量化建模
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)