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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 11:45:32