如何在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
相关产品推荐
相关产品推荐

