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

如何基于列位置将表格指定列的负值替换为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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:41:05