如何在Power Query中为列中首次出现的值标记1,其余标记0?
在Power Query中标记首次出现的值为1,其余为0
方法1:可视化界面操作(适合新手)
- 选中要判断的User ID列,点击顶部菜单栏的「添加列」→「索引列」→「从1开始」,给每行新增一个序号列(默认叫“索引”)。
- 再次选中User ID列,点击「转换」→「分组依据」,按以下设置填写:
- 分组依据:选择
User ID - 新列名:输入
首次出现索引 - 操作:选择「最小值」
- 列:选择刚添加的「索引」
- 分组依据:选择
- 点击「关闭上载」旁的下拉箭头,选择「合并查询」→「合并查询作为新查询」,在弹窗里选原数据表和刚分组好的表,匹配列都选
User ID,合并类型选「左外部」。 - 点击合并后列右侧的展开按钮,只勾选「首次出现索引」列。
- 点击「添加列」→「自定义列」,输入公式:
=if [索引] = [首次出现索引] then 1 else 0,生成标记列。 - 最后删掉不需要的「索引」和「首次出现索引」列即可。
方法2:M语言代码直接实现(高效快捷)
打开Power Query的「高级编辑器」,替换原有代码(把Source换成你实际的数据源步骤,User ID换成你要判断的列名):
let Source = 你的数据源, // 替换成你实际的数据源引用 添加索引 = Table.AddIndexColumn(Source, "索引", 1, 1), 分组取首次索引 = Table.Group(添加索引, {"User ID"}, {{"首次出现索引", each List.Min([索引]), type number}}), 合并回原表 = Table.NestedJoin(添加索引, {"User ID"}, 分组取首次索引, {"User ID"}, "临时表", JoinKind.LeftOuter), 展开索引列 = Table.ExpandTableColumn(合并回原表, "临时表", {"首次出现索引"}, {"首次出现索引"}), 生成标记列 = Table.AddColumn(展开索引列, "首次出现标记", each if [索引] = [首次出现索引] then 1 else 0), 清理冗余列 = Table.RemoveColumns(生成标记列,{"索引", "首次出现索引"}) in 清理冗余列
补充说明
如果你的User ID列存在空白值,不想把空白当成有效分组,可以在「添加索引」步骤后加一行过滤代码:
筛选非空白 = Table.SelectRows(添加索引, each not List.IsEmpty({[User ID]}))
然后后续步骤都基于筛选非空白这个表来操作即可。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

