如何在Power Query中实现行转列数据转换(附示例数据集与期望输出)
在Power Query中将分段行数据转成宽表的解决方案
嘿,这个场景我太熟了!你的数据源把水果的基础属性(价格、数量)和颜色属性拆成了上下两段,中间还用Colour行分隔,要合并成每行一条完整水果记录对不对?给你一套Power Query里的实操步骤,亲测好使:
步骤1:把数据导入Power Query
先在Excel里选中你的"My Data"表格,点击「数据」选项卡 → 「自表格/区域」,就能进入Power Query编辑器啦。
步骤2:拆分数据源为两个子表
我们需要把基础信息和颜色信息分开处理:
- 先加个索引列:点「添加列」→ 「索引列」→ 「从0开始」,这样每行都有个编号方便定位
- 找到
FruitName是Colour的那一行,记下它的索引值(比如我的例子里是3,因为前3行是Apple、Banana、Orange,第4行才是Colour) - 拆出基础信息表:筛选索引列小于刚才记下的数值的行,然后删掉索引列,把这个表重命名为
Table_Base - 拆出颜色信息表:筛选索引列大于刚才数值的行,删掉索引列,然后把原来的
Price列改名叫Colour,再删掉空的Quantity列,重命名为Table_Colour
步骤3:合并两个子表
现在两个表都有FruitName列,正好用来关联:
- 回到主查询(或者直接新建一个合并查询),点「主页」→ 「合并查询」→ 「合并查询作为新查询」
- 第一个表选
Table_Base,第二个表选Table_Colour,两个表的关联列都选FruitName,合并类型选「左外部」 - 展开合并后的列:点击合并列右边的小箭头,只勾选
Colour列,取消「使用原始列名作为前缀」的勾选就行
步骤4:整理最终表格
最后检查下数据,删掉多余的列(如果有的话),调整列顺序到你想要的样子,然后点「关闭并上载」,就能得到你要的"My Preferred Answer"格式啦!
补充:嫌手动点麻烦?用M代码一键搞定
如果你喜欢直接写代码,打开Power Query的高级编辑器,把现有代码替换成下面这段(注意把MyData改成你原始表格的名字):
let Source = Excel.CurrentWorkbook(){[Name="MyData"]}[Content], // 添加索引列定位分隔行 AddIndex = Table.AddIndexColumn(Source, "Index", 0, 1, Int64.Type), // 找到Colour行的索引位置 ColourIndex = Table.SelectRows(AddIndex, each [FruitName] = "Colour"){0}[Index], // 提取基础信息表并移除索引列 Table_Base = Table.RemoveColumns(Table.SelectRows(AddIndex, each [Index] < ColourIndex), {"Index"}), // 提取颜色信息表并整理列名 Table_Colour = Table.RenameColumns(Table.RemoveColumns(Table.SelectRows(AddIndex, each [Index] > ColourIndex), {"Index", "Quantity"}), {{"Price", "Colour"}}), // 按FruitName合并两个表 MergedTables = Table.NestedJoin(Table_Base, {"FruitName"}, Table_Colour, {"FruitName"}, "Table_Colour", JoinKind.LeftOuter), // 展开颜色列 ExpandedColour = Table.ExpandTableColumn(MergedTables, "Table_Colour", {"Colour"}, {"Colour"}), // 调整列顺序到目标格式 ReorderedColumns = Table.ReorderColumns(ExpandedColour, {"FruitName", "Price", "Quantity", "Colour"}) in ReorderedColumns
这样就能一步到位得到你想要的结果啦!
内容的提问来源于stack exchange,提问作者EmbraceNothingButFuture
相关产品推荐
相关产品推荐

