如何在Excel或Google Sheets中对指定数据进行Unpivoting操作?
Excel/Google Sheets 宽表转窄表(Unpivot)方法
源数据为宽表结构:第一列是姓名(Name),后续列是不同科目(如Math、English),每行对应一个人的各科成绩;目标是转换为三列的窄表:Name(姓名)、Subject(科目)、Score(成绩),每行记录单个人单科成绩。
Excel 操作方法
方法1:Power Query(推荐,适合大量数据)
- 选中源数据区域,点击顶部菜单栏「数据」→「从表格/区域」,确认数据包含表头后进入Power Query编辑器
- 在编辑器中选中所有科目列(如Math、English等列)
- 点击「转换」→「逆透视列」→「逆透视其他列」(若仅选中科目列,直接选「逆透视列」即可)
- 双击列名,将「属性」改为
Subject,「值」改为Score - 点击「关闭并上载」,生成转换后的窄表
方法2:公式法(适合少量数据)
假设源数据在A1:C4(A列=Name,B列=Math,C列=English):
- 在E2输入公式:
=INDEX($A:$A,INT((ROW()-2)/2)+2)(公式中2为科目数量,需根据实际科目数调整) - 在F2输入公式:
=INDEX($B$1:$C$1,MOD(ROW()-2,2)+1) - 在G2输入公式:
=INDEX($B:$C,INT((ROW()-2)/2)+2,MOD(ROW()-2,2)+1) - 下拉三个公式直到出现空值,最后修改表头为Name、Subject、Score
Google Sheets 操作方法
方法1:QUERY+FLATTEN公式(快速实现)
假设源数据在A1:C4(A列=Name,B列=Math,C列=English):
- 在E1、F1、G1分别输入表头:
Name、Subject、Score - 在E2输入以下公式,按回车自动生成结果:
=QUERY(FLATTEN(A2:A4&"|"&B1:C1&"|"&B2:C4), "SELECT SPLIT(Col1, '|') WHERE Col1 IS NOT NULL", 0)
方法2:Power Query(同Excel逻辑)
- 选中源数据区域,点击「数据」→「数据连接器」→「从表格」
- 进入编辑器后选中所有科目列,点击「转换」→「逆透视列」→「逆透视其他列」
- 修改列名为
Subject和Score,关闭并上载数据
内容的提问来源于stack exchange,提问作者user2779065
相关产品推荐
相关产品推荐

