You need to enable JavaScript to run this app. 如何在Pandas DataFrame中插入基于现有行插值平均的缺失年份行?
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame中插入基于现有行插值平均的缺失年份行?

Pandas 实现补全中间年份并平滑插值的方案

核心逻辑

按国家分组后补全2010-2015的连续年份,对数值字段使用等间隔线性插值,计算出来的结果就是你需要的逐年平均递增值。

完整实现代码

import pandas as pd
# 原始数据生成
info = {'Year': [2010, 2010, 2010, 2010, 2015, 2015, 2015, 2015],
        'Country': ['USA', 'Mexico', 'Canada', 'China', 'USA', 'Mexico', 'Canada', 'China'],
        'AgeAvg': [40, 44, 45, 49, 45, 46, 50, 52],
        'HeightAvg': [68, 65, 67, 68, 69, 70, 64, 67]}
df = pd.DataFrame(data=info)

# 核心处理逻辑
# 1. 设置复合索引方便分组处理
df = df.set_index(['Country', 'Year'])
# 2. 按国家分组补全年份后线性插值
df = df.groupby('Country', group_keys=False).apply(
    lambda x: x.reindex(range(2010, 2016)).interpolate(method='linear')
)
# 3. 重置索引恢复标准DataFrame格式
df = df.reset_index()

# 输出结果验证
print(df)

结果说明

运行后你会得到2010到2015年每个国家的完整数据,其中:

  • USA的AgeAvg字段按2010:40、2011:41、2012:42、2013:43、2014:44、2015:45的规律填充,完全匹配你给出的示例要求
  • 所有数值字段都会按照首尾值自动计算逐年增量,实现平滑过渡
    如果需要插值结果为整数,只需要修改插值部分的代码,增加取整逻辑即可:
lambda x: x.reindex(range(2010, 2016)).interpolate(method='linear').round(0).astype(int)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 21:42:03