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

如何按站点分组对DataFrame多年观测数据进行线性插值?

问题原因与解决方案

核心问题

你的代码未生效主要有两个潜在原因:

  • pandas内置的interpolate()方法默认仅对NaN类型的缺失值执行插值,你数据中的缺失值被标记为0,不会被识别为待填充的缺失值
  • 你的代码中分组使用的列名为stations,但从数据样例来看,站点列的实际列名为station,拼写不一致会导致分组报错或失效

修复步骤

1. 替换缺失值标识

先将数据中代表缺失的0替换为pandas可识别的缺失值类型:

import pandas as pd
# 若你的业务中真实观测值存在0,可调整替换逻辑,仅替换连续出现的异常0
df['observations'] = df['observations'].replace(0, pd.NA)

2. 按站点分组执行插值

修正列名并使用apply确保每个站点的序列独立插值:

df['interpolated_obs'] = df.groupby('station', group_keys=False)['observations'].apply(
    lambda x: x.interpolate(method='linear')
)

可选参数调整

如果需要限制连续缺失值的插值长度,避免过长连续缺测时的插值结果失真,可以添加limit参数:

# 示例:最多插值连续3个缺失值,超过3个的连续缺失保留NaN
df['interpolated_obs'] = df.groupby('station', group_keys=False)['observations'].apply(
    lambda x: x.interpolate(method='linear', limit=3)
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:30:02