Google Sheets分组累计计数公式优化:寻求高效解决方案
Google Sheets高效分组累计计数方案探讨
我当前在Google Sheets中计算分组累计计数的公式如下:=LAMBDA(a,INDEX(if(a="",,COUNTIFS(a,a,row(a),"<="&row(a)))))(B4:B)
该公式的时间复杂度为O(R²),1000行数据需执行100万次运算,效率较低。我尝试过LAMBDA与SCAN的组合,但仅能实现单个分组的快速累计计数:=INDEX(IF(B4:B="🌽 Corn",SCAN(0,B4:B,LAMBDA(i,v,if(v="🌽 Corn",i+1,i))),))
请问如何实现多分组的高效累计计数?
注:脚本方案可通过对象与哈希表实现高效计算。
测试场景
总计N条数据,分为m个分组,分组项为可随机重复的唯一值。示例数据集:
a b b b a
上述示例共5条数据(N=5),2个分组(m=2),分组值为"a"和"b"。需适配以下高效计算场景:
- 场景1:单个分组的出现次数≥1000次
- 场景2:分组数量m≥1000个
- 通用场景:总数据量N≈5万条以上
测试环境
含5万行数据的Google Sheets测试模板。
速度测试结果
已测试的解决方案包括:
- 问题中的
COUNTIFS及相关COUNTIF方案 XLOOKUP方案- 复杂
MATCH逻辑方案 - 🏆排序逻辑方案
测试结果显示,排序逻辑方案的速度优于其他所有方案,测试代码采用对应排序方案的实现逻辑。
内容的提问来源于stack exchange,提问作者Max Makhrov
相关产品推荐
相关产品推荐

