Excel Power Query能否直接获取行索引以条件生成新列?
在Power Query中无需临时索引列直接获取行索引生成条件列
核心解决方案:利用Table.AddColumn的索引参数
你不需要创建临时索引列再删除,Table.AddColumn本身支持在列生成逻辑中直接获取当前行的索引——只需要使用完整的函数定义代替each简写,接收第二个参数(行索引)即可。
针对你的示例需求(第0行设为0,其余行设为1),可以一步实现:
Table.AddColumn( Table.FromRecords({ [A = 1, B = 10], [A = 2, B = 20], [A = 3, B = 30] }), "C", (row, index) => if index = 0 then 0 else 1, type number )
原理说明
Table.AddColumn的第三个参数实际上是一个可接收两个参数的函数:
- 第一个参数:当前行的记录(对应
each上下文里的_) - 第二个参数:当前行的0起始索引
当你用each简写时,只会传递第一个参数,所以无法直接拿到索引;改用完整的(row, index) => ...形式,就能直接访问行的位置信息,完全不需要临时索引列。
替代方法:用List操作实现
如果你习惯用列表处理,也可以通过Table.ToRecords把表格转成记录列表,再用List.Transform结合索引生成新列,最后转回表格:
let Source = Table.FromRecords({ [A = 1, B = 10], [A = 2, B = 20], [A = 3, B = 30] }), Records = Table.ToRecords(Source), UpdatedRecords = List.Transform(Records, (record, index) => Record.AddField(record, "C", if index = 0 then 0 else 1) ), Result = Table.FromRecords(UpdatedRecords) in Result
不过这种方法不如直接用Table.AddColumn的索引参数简洁高效。
内容的提问来源于stack exchange,提问作者BadAtMaths
相关产品推荐
相关产品推荐

