如何基于列位置将表格指定列的负值替换为0(Power Query)
基于列位置替换负值为0的Power Query实现
场景1:直接修改指定位置的原列(将负值替换为0)
如果需要直接调整表格中第3、4列(Power Query中列索引从0开始,对应索引2、3)的数值,把其中的负值替换为0,可用以下M代码:
let Source = #"Previous Step", // 获取目标列名:第3列(索引2)和第4列(索引3) TargetColumns = {Table.ColumnNames(Source){2}, Table.ColumnNames(Source){3}}, // 批量转换目标列,负值替换为0 TransformedTable = Table.TransformColumns(Source, List.Transform(TargetColumns, (ColName) => { ColName, each if _ < 0 then 0 else _ }) ) in TransformedTable
场景2:基于指定位置的列生成新的条件列
如果需要保留原列,基于指定位置的列新增处理后的条件列,可参考以下实现:
单列生成新列(以第3列为例)
#"Added Conditional Column" = Table.AddColumn(#"Previous Step", "New Column", each let // 获取第3列的当前行值(索引2) ColValue = Record.Field(_, Table.ColumnNames(#"Previous Step"){2}) in if ColValue < 0 then 0 else ColValue )
批量为多列生成对应新列(第3、4列)
let Source = #"Previous Step", ColNames = Table.ColumnNames(Source), // 指定要处理的列索引(第3列=2,第4列=3) TargetIndices = {2, 3}, // 循环为每个目标列生成新列 FinalTable = List.Accumulate(TargetIndices, Source, (CurrentTable, Idx) => Table.AddColumn(CurrentTable, "Processed Column " & Text.From(Idx+1), each let ColValue = Record.Field(_, ColNames{Idx}) in if ColValue < 0 then 0 else ColValue ) ) in FinalTable
关键说明
- Power Query的列索引从0开始,第N列对应的索引为
N-1,比如第3列对应索引2。 Table.ColumnNames()用于获取表格的列名列表,通过{索引}可定位到对应位置的列名。Table.TransformColumns()适合直接修改现有列,Table.AddColumn()适合保留原列并新增处理后的列。
内容的提问来源于stack exchange,提问作者Rodrigo Camargo Jr.
相关产品推荐
相关产品推荐

