如何在Pandas DataFrame中按指定倍数n实现行间线性插值?
问题:DataFrame行间线性插值,生成n倍原行数的结果
原DataFrame定义:
import pandas as pd data=pd.DataFrame({'data1':[10,20,30], 'data2':[15,25,35], 'data3':[25,35,35]})
需求:根据参数n(此处n=2)在行间执行线性插值,要求新数据集new_data的行数为n × 原数据行数。直接用np.linspace实现会得到n*len(data)-1行,不符合需求。期望输出格式:
data1 data2 data3 10.0 15.0 25.0 15.0 20.0 30.0 20.0 25.0 35.0 25.0 30.0 35.0 30.0 35.0 35.0 20.0 25.0 30.0
补充思路:将最后一行设为原数据最后一行与第一行的插值。
解决方案
核心逻辑是把原数据的最后一行与第一行也视为一组插值对,让每组相邻行(含首尾循环组)都生成n个点,最终总行数刚好是n×原行数。
实现代码:
import pandas as pd import numpy as np # 原数据 data = pd.DataFrame({'data1':[10,20,30], 'data2':[15,25,35], 'data3':[25,35,35]}) n = 2 # 扩展数据:追加原第一行到末尾,构造首尾循环的插值对 extended_data = pd.concat([data, data.iloc[[0]]], axis=0) interpolated_rows = [] # 遍历每一组相邻行 for i in range(len(data)): row_current = extended_data.iloc[i].values row_next = extended_data.iloc[i+1].values # 对当前组生成n个插值点,endpoint=False避免重复下一行的起始值 for val in np.linspace(row_current, row_next, num=n, endpoint=False): interpolated_rows.append(val) # 转换为目标DataFrame new_data = pd.DataFrame(interpolated_rows, columns=data.columns) print(new_data)
代码说明
- 扩展数据:把原第一行追加到数据末尾,让最后一组插值对变为原最后一行+第一行,满足循环插值的要求。
- 逐组插值:遍历每组相邻行,用
np.linspace生成n个点,endpoint=False确保每组的插值点不包含下一行的起始值,避免出现重复行。 - 结果组装:收集所有插值点后转为DataFrame,直接得到n×原行数的目标数据。
运行后输出与期望完全一致:
data1 data2 data3 0 10.0 15.0 25.0 1 15.0 20.0 30.0 2 20.0 25.0 35.0 3 25.0 30.0 35.0 4 30.0 35.0 35.0 5 20.0 25.0 30.0
内容的提问来源于stack exchange,提问作者Unni
相关产品推荐
相关产品推荐

