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

Power Query技术问询:如何用前一日行数据填充空值

用前一日数据填充空值的解决方案

不用按日期分组——分组会把每天的数据拆成独立组,反而没法跨日期取数。下面是两种常用工具的具体实现:

方法1:Python Pandas

适合批量处理本地数据,核心用ffill()(向前填充)函数自动取上一行非空值填充当前空值,前提是数据按日期排序:

import pandas as pd

# 1. 读取数据(以CSV为例)
df = pd.read_csv('your_data.csv')

# 2. 确保日期列是datetime格式,避免排序出错
df['日期'] = pd.to_datetime(df['日期'])

# 3. 按日期升序排序(关键!必须保证数据按时间顺序排列)
df = df.sort_values('日期')

# 4. 向前填充空值
# 如果有分组维度(比如不同产品/门店),改成 df.groupby('分组列').ffill()
df_filled = df.ffill()

# 5. 保存结果
df_filled.to_csv('filled_data.csv', index=False)

输入数据里的空值会自动取前一天同列的非空值填充,和你要的输出效果一致。

方法2:SQL

适合数据库内直接处理,根据不同数据库语法调整:

PostgreSQL/Redshift等支持IGNORE NULLS的数据库

用LAST_VALUE窗口函数,直接取当前行之前的最后一个非空值:

SELECT
    日期,
    LAST_VALUE(销售额 IGNORE NULLS) OVER (ORDER BY 日期 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS 销售额,
    LAST_VALUE(访客数 IGNORE NULLS) OVER (ORDER BY 日期 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS 访客数
FROM your_table
ORDER BY 日期;

如果有分组维度(比如产品),在OVER里加PARTITION BY 产品列即可。

MySQL 8.0+

MySQL不支持IGNORE NULLS,可以用自定义变量+COALESCE实现:

SELECT
    日期,
    @sales := COALESCE(销售额, @sales) AS 销售额,
    @visitors := COALESCE(访客数, @visitors) AS 访客数
FROM your_table, (SELECT @sales := NULL, @visitors := NULL) AS init_vars
ORDER BY 日期;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 19:22:48