You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power Query中多字段数据横向展开实现方法求助

问题描述

我有如下数据集,希望将其转换为横向结构。我尝试按sol_ped、pos、name字段分组,再通过Table.Column创建自定义列,但该方法仅支持添加单个字段(如prec),而我需要同时处理prec、cat等多个字段,请问该如何实现?

样本数据集

sol_pedposnamepreccat
111one11.01a
111one14.00b
111one7.00c
112two8.12d

期望结果

sol_pedposnameprec1cat1prec2cat2prec3cat3prec4cat4
111one11.01a14.00b7.00c0.00na
112two18.02d18.12nanananana

解决方案(Power Query)

步骤1:给分组添加组内序号

先为每个sol_ped+pos+name的分组添加行序号,标记每组内的条目顺序:

  • 进入Power Query编辑器,选中数据集
  • 执行分组操作:点击转换 > 分组依据,选择高级选项
    • 分组列:sol_ped、pos、name
    • 添加聚合列:名称设为组内数据,操作选所有行
  • 为组内数据列的每个子表添加索引列,M代码片段:
= Table.AddColumn(分组结果, "带序号的组数据", each Table.AddIndexColumn([组内数据], "序号", 1, 1))

步骤2:生成带序号的字段名并合并

将每组内的prec和cat转换为带序号的横向列:

  1. 展开带序号的组数据列,仅选择序号、prec、cat
  2. 添加两个自定义列:
    • 列1:名称prec列名,公式:"prec" & Text.From([序号]);值列prec值,公式:[prec]
    • 列2:名称cat列名,公式:"cat" & Text.From([序号]);值列cat值,公式:[cat]
  3. 删除序号、prec、cat原列
  4. 再次按sol_ped、pos、name分组,将每组的列名和值合并为记录,M代码片段:
= Table.Group(上一步结果, {"sol_ped", "pos", "name"}, {{"合并记录", each 
    Record.FromList(
        List.Combine({[prec值], [cat值]}), 
        List.Combine({[prec列名], [cat列名]})
    ), type record}})

步骤3:展开并补全缺失值

  1. 点击合并记录列的展开箭头,选择所有列展开
  2. 批量替换缺失值:将prec类列的空值替换为0.00,cat类列的空值替换为na,可通过转换 > 替换值批量操作

内容的提问来源于stack exchange,提问作者Cami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 22:57:22