Google Sheets如何优雅将值为1的对应列名转为数组 无需逐列引用
Google Sheets 批量生成特征数组方案
不用逐列写判断分支,用数组遍历+筛选的逻辑可以实现一次写公式、自动适配所有特征列,后续新增/删除特征列不需要修改公式逻辑。
通用公式
把公式放在Array列的首个数据单元格(示例里是E2),会自动向下溢出整列结果:
=ARRAYFORMULA( IF( ISBLANK(A2:A), "", "[" & BYROW( B2:INDEX(2:1000,COUNTA(1:1)), LAMBDA(single_row, IF( SUM(single_row)=0, "", JOIN(",",FILTER(CHAR(34)&FILTER(1:1,1:1<>"")&CHAR(34),single_row=1)) ) ) ) & "]" ) )
逻辑说明
- 自动适配列范围:
B2:INDEX(2:1000,COUNTA(1:1))会自动识别第一行(表头行)所有非空列名,锁定从B列开始的全部特征列范围,后续新增特征列只要在第一行填好列名,公式会自动纳入计算,不需要手动调整列引用 - 逐行批量处理:
BYROW搭配LAMBDA逐行遍历特征取值,替代原来逐列写IF拼接的冗余逻辑 - 自动处理全0行:通过
SUM(single_row)=0判断当前行所有特征值都是0时,直接拼接返回[] - 统一格式处理:
FILTER直接筛选出当前行值为1对应的列名,统一包裹双引号后用逗号拼接,不需要给每列单独写拼接规则
适配调整
如果你的表格结构和示例不一致,只需要修改2处参数:
- 把公式里的
B2改成你第一个特征列的首个数据单元格 - 把公式里所有
1:1替换成你实际存放特征列名的表头行号即可
如果需要和你原公式输出完全一致的尾逗号格式(即数组最后一个元素后也带逗号),把JOIN部分的代码改成JOIN(",",FILTER(...)) & ","即可,默认公式输出的是无尾逗号的标准JSON数组格式。
内容的提问来源于stack exchange,提问作者Zin Yosrim
相关产品推荐
相关产品推荐

