Excel Power Query分组求助:将两列表不同行值转为新列(新手)
Power Query 实现两列数据分组转列方案
针对你要把两列多行表格按第一列不同项分组转成新列的需求,给你两种适合新手的实现方式:
一、可视化界面分步操作(无需写代码)
假设你的原表含两列:第一列是分类项(比如「类别」),第二列是对应值(比如「数值」),操作步骤如下:
- 导入数据到Power Query:选中数据区域,点击Excel顶部「数据」选项卡 → 「从表格/范围」,确认弹窗里的「我的表格有标题」选项,进入Power Query编辑器。
- 按分类分组并展开:点击「转换」选项卡 → 「分组依据」,分组列选你的分类列(比如「类别」),新列名填「值集合」,操作选「所有行」,点击确定。之后点击「值集合」列右侧的展开箭头,只勾选值列(比如「数值」),点击确定。
- 添加组内索引:选中展开后的「数值」列,点击「添加列」选项卡 → 「索引列」→ 「从0开始」,让每个分类下的行拥有独立序号。
- 透视生成新列:选中刚添加的「索引」列,点击「转换」选项卡 → 「透视列」,值列选你的数值列(比如「数值」),列名选分类列(比如「类别」),高级选项选「不要聚合」,点击确定。
- 收尾清理:右键删除「索引」列,调整列顺序后,点击「主页」选项卡 → 「关闭并上载」,结果会同步到Excel中。
二、直接套用M代码(快速实现)
打开Power Query编辑器后,点击「主页」→ 「高级编辑器」,替换默认代码为以下内容,记得把注释里的名称改成你自己的:
let 源 = Excel.CurrentWorkbook(){[Name="你的表名"]}[Content], // 替换为你Excel中的表名称 按分类分组 = Table.Group(源, {"你的分类列名"}, {{"值集合", each _, type table [你的分类列名=text, 你的值列名=number]}}), // 替换两个列名,值为文本就把number改成text 展开值列 = Table.ExpandTableColumn(按分类分组, "值集合", {"你的值列名"}, {"你的值列名"}), 添加组内索引 = Table.AddIndexColumn(展开值列, "索引", 0, 1, Int64.Type), 透视生成新列 = Table.Pivot(添加组内索引, List.Distinct(添加组内索引[你的分类列名]), "你的分类列名", "你的值列名"), 删除索引列 = Table.RemoveColumns(透视生成新列,{"索引"}) in 删除索引列
注意事项
- 透视时选「不要聚合」是为了保留每个分类下的所有行,避免自动求和/平均;
- 如果值列是文本格式,把代码里的
number替换为text即可。
内容的提问来源于stack exchange,提问作者OnodiBence
相关产品推荐
相关产品推荐

