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

如何在Power Query中按另一列分组执行fill up/fill down操作?

按分组列执行向上/向下填充的解决方案

原始数据

客户编号期末余额
C001NULL
C001100
C001NULL
C002NULL
C002NULL
C002499
C002NULL
C002599
C002NULL

期望结果

客户编号期末余额
C001100
C001100
C001100
C002499
C002499
C002499
C002499
C002599
C002599

错误结果(全局fill down)

客户编号期末余额
C001100
C001100
C001100
C002100 (错误)
C002100 (错误)
C002499
C002499
C002599
C002599

可以按分组列执行向上/向下填充,核心是先按分组字段拆分数据,再对每个分组单独填充,避免跨组污染,以下是不同工具的实现方式:

1. SQL(MySQL示例)

通过窗口函数按客户分组,先做后向填充(向上填充)再做前向填充(向下填充):

SELECT 
    客户编号,
    COALESCE(
        -- 后向填充:取当前行及之后第一个非NULL值(处理向上填充需求)
        LAST_VALUE(期末余额 IGNORE NULLS) OVER (
            PARTITION BY 客户编号 
            ORDER BY (SELECT 1) 
            ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
        ),
        -- 前向填充:取当前行及之前最后一个非NULL值(处理向下填充需求)
        LAST_VALUE(期末余额 IGNORE NULLS) OVER (
            PARTITION BY 客户编号 
            ORDER BY (SELECT 1) 
            ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
        )
    ) AS 期末余额
FROM 你的数据表名;

2. Python Pandas

利用groupby拆分分组,对每组先执行bfill()(向上填充)再执行ffill()(向下填充):

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    '客户编号': ['C001', 'C001', 'C001', 'C002', 'C002', 'C002', 'C002', 'C002', 'C002'],
    '期末余额': [None, 100, None, None, None, 499, None, 599, None]
})

# 分组填充
df['期末余额'] = df.groupby('客户编号')['期末余额'].apply(lambda x: x.bfill().ffill())

print(df)

3. Excel

方法1:分组手动填充

  1. 确保数据已按客户编号排序,选中客户编号列,点击「数据」→「分级显示」→「创建组」
  2. 对每个分组单独选中期末余额列的空值,输入第一个非空值的单元格引用,按Ctrl+Enter批量填充

方法2:公式自动填充

在新列输入以下公式,下拉填充即可按分组完成双向填充:

=LOOKUP(2,1/($A$2:$A$10=A2)/($B$2:$B$10<>""),$B$2:$B$10)

内容的提问来源于stack exchange,提问作者Solo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 13:01:12