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

如何基于Pandas中前一行close值向前填充重采样后的NaN?

解决方案:用前一行收盘价填充所有缺失的OHLC字段

这个需求在股票K线数据补全场景里特别常见——你要的不是同列各自向前填充,而是让所有缺失的open/high/low/close字段,都用上一行的close值来补全。下面是几种高效的实现方式:

步骤1:先完成重采样操作

首先把你的重采样代码固化下来,方便后续处理:

# 执行3分钟重采样,聚合OHLC字段
resampled_df = feeddf.resample('3Min').agg({
    'open': 'first',
    'high': 'max',
    'low': 'min',
    'close': 'last'
})

方法一:统一用向前填充的收盘价补全所有列

这种方法先提取出向前填充后的收盘价序列,再用它覆盖所有列的NaN值:

# 先获取向前填充的收盘价序列(确保每一行都有前一行的收盘价)
filled_close = resampled_df['close'].ffill()

# 对每一列进行填充:如果当前值是NaN,就用对应行的filled_close值
resampled_df_filled = resampled_df.apply(lambda col: col.fillna(filled_close))

方法二:分步填充更直观

如果你喜欢逻辑更清晰的分步操作,可以先补全close列,再把其他列的NaN替换成同行情的close值:

# 第一步:先把close列向前填充(确保没有NaN)
resampled_df['close'] = resampled_df['close'].ffill()

# 第二步:把open/high/low的NaN值替换成对应行的close值
resampled_df[['open', 'high', 'low']] = resampled_df[['open', 'high', 'low']].fillna(
    resampled_df['close'], axis=0
)

预期结果

执行完上面任意一种方法后,你的DataFrame会变成这样:

open   high    low  close
date                                              
2017-12-03 07:00:00  14.46  14.46  14.46  14.46
2017-12-03 07:03:00  14.46  14.46  14.46  14.46
2017-12-03 07:06:00  14.50  14.50  14.50  14.50
2017-12-03 07:09:00  14.50  14.50  14.50  14.50
2017-12-03 07:12:00  14.50  14.56  14.50  14.56

这样就完美实现了用前一行收盘价补全所有缺失字段的需求,符合股票数据补全的常规逻辑(无交易时段沿用最后收盘价)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:30:47