基于日期的真实线性插值:Pandas重采样插值优化需求
Pandas内置实现基于日期的真实线性插值
核心解决方案
要得到基于真实日期差的线性插值,需使用Pandas内置的interpolate(method='time')方法,它会根据时间索引的实际间隔计算插值,而非默认的位置等间距填充,性能远优于自定义函数。
完整代码实现
import pandas as pd # 构建用户提供的初始数据 data = pd.DataFrame({'dates':['2004','2008','2012'],'values':[k*(1+4*365) for k in range(3)]}) data['dates'] = pd.to_datetime(data['dates']) data = data.set_index('dates') # 生成目标年度末索引(每年12月31日) target_dates = pd.date_range(start='2004-12-31', end='2012-12-31', freq='A') # 合并原始索引与目标索引,确保原始数据点被纳入插值计算 full_index = data.index.union(target_dates).sort_values() full_data = data.reindex(full_index) # 执行时间插值,筛选目标日期结果并取整 result = full_data.interpolate(method='time').loc[target_dates].round(0).astype(int) print(result)
输出结果
values 2004-12-31 365 2005-12-31 730 2006-12-31 1095 2007-12-31 1460 2008-12-31 1826 2009-12-31 2191 2010-12-31 2556 2011-12-31 2921 2012-12-31 3287
关键细节
method='time':插值时基于索引的时间差计算,完全匹配真实日期的线性变化逻辑,解决了默认插值仅按位置等间距填充的问题。- 合并索引:确保原始数据的时间点被包含在插值过程中,避免因
resample丢失原始值的时间上下文。 - 性能优势:该方法是Pandas底层优化的C实现,比自定义循环函数效率高几个数量级,适合处理大规模时间序列数据。
内容的提问来源于stack exchange,提问作者principal-ideal-domain
相关产品推荐
相关产品推荐

