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

Python:合并不同时间戳时序数据并填充NA值的实现方法

用最近有效数据填充时间序列中的NA值

嘿,这个需求用pandas的向前填充(forward fill)功能就能完美解决,正好匹配你描述的“用最近有效数据替换NA”的要求,我给你拆解一下怎么做:

核心解决方案

你已经通过pd.concat([df1, df2], axis=1)完成了时间索引的合并,接下来只需要对合并后的DataFrame调用fillna()方法,指定method='ffill'就行——这个参数的作用就是让每一个NA值,用它同一列中之前最近的非NA值来填充,完全符合你举的例子:0.1时刻的B列取0.09的2.1,0.30时刻的A列取之前最近的3.0。

具体代码如下:

# 假设合并后的DataFrame名为merged_df
filled_df = merged_df.fillna(method='ffill')

额外细节说明

  1. 开头的NA值处理:如果某一列最开头就有NA(比如你的例子里0.09时刻A列无数据,而之前也没有A的有效数据),那这些开头的NA会保留下来。如果你想把这些也处理掉,可以在向前填充后再加一步向后填充(用后面的第一个有效数据填充开头的NA),不过这得看你的业务场景是否合适:
    # 先向前填充,再处理开头的NA
    filled_df = merged_df.fillna(method='ffill').fillna(method='bfill')
    
  2. 精细控制填充范围:如果需要限制只能填充时间间隔在某个范围内的NA(比如只填充前后时间差不超过0.05的NA),可以结合rolling方法,但绝大多数情况下,直接用fillna(method='ffill')就足够满足你的需求了。

举个直观的例子

假设你的合并后数据是这样的:

时间AB
0.051.0NaN
0.09NaN2.1
0.1NaNNaN
0.253.0NaN
0.30NaN2.3

运行fillna(method='ffill')后,结果会变成:

时间AB
0.051.0NaN
0.091.02.1
0.11.02.1
0.253.02.1
0.303.02.3

你看,完全符合你的预期:0.1的B列用0.09的2.1填充,0.30的A列用0.25的3.0填充,0.09的A列因为之前最近的有效数据是0.05的1.0,所以填充1.0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:22:43