Power Query中多字段数据横向展开实现方法求助
问题描述
我有如下数据集,希望将其转换为横向结构。我尝试按sol_ped、pos、name字段分组,再通过Table.Column创建自定义列,但该方法仅支持添加单个字段(如prec),而我需要同时处理prec、cat等多个字段,请问该如何实现?
样本数据集
| sol_ped | pos | name | prec | cat |
|---|---|---|---|---|
| 11 | 1 | one | 11.01 | a |
| 11 | 1 | one | 14.00 | b |
| 11 | 1 | one | 7.00 | c |
| 11 | 2 | two | 8.12 | d |
期望结果
| sol_ped | pos | name | prec1 | cat1 | prec2 | cat2 | prec3 | cat3 | prec4 | cat4 |
|---|---|---|---|---|---|---|---|---|---|---|
| 11 | 1 | one | 11.01 | a | 14.00 | b | 7.00 | c | 0.00 | na |
| 11 | 2 | two | 18.02 | d | 18.12 | na | na | na | na | na |
解决方案(Power Query)
步骤1:给分组添加组内序号
先为每个sol_ped+pos+name的分组添加行序号,标记每组内的条目顺序:
- 进入Power Query编辑器,选中数据集
- 执行分组操作:点击转换 > 分组依据,选择高级选项
- 分组列:
sol_ped、pos、name - 添加聚合列:名称设为
组内数据,操作选所有行
- 分组列:
- 为
组内数据列的每个子表添加索引列,M代码片段:
= Table.AddColumn(分组结果, "带序号的组数据", each Table.AddIndexColumn([组内数据], "序号", 1, 1))
步骤2:生成带序号的字段名并合并
将每组内的prec和cat转换为带序号的横向列:
- 展开
带序号的组数据列,仅选择序号、prec、cat - 添加两个自定义列:
- 列1:名称
prec列名,公式:"prec" & Text.From([序号]);值列prec值,公式:[prec] - 列2:名称
cat列名,公式:"cat" & Text.From([序号]);值列cat值,公式:[cat]
- 列1:名称
- 删除
序号、prec、cat原列 - 再次按
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:展开并补全缺失值
- 点击
合并记录列的展开箭头,选择所有列展开 - 批量替换缺失值:将
prec类列的空值替换为0.00,cat类列的空值替换为na,可通过转换 > 替换值批量操作
内容的提问来源于stack exchange,提问作者Cami
相关产品推荐
相关产品推荐

