在给定步数 Python 的两个 x 值之间进行插值/外推



我想创建一个新的 df,给定起始值 x0 和结束值 x1,输出对给定的 n 个点进行插值/外推。

例如,给定下面的 df,我想在 x0=57000 和 x1=62000 之间以 250 或 n=21 点的步长创建一个新的 df:

x = [57136,57688,58046,58480,58730,59210,59775,60275,60900,61365,62030]
y = [3.87, 3.55, 3.75, 2.04, 2.66, 3.1, 3.38, 4.13, 3.7, 4, 5.78]
df = pd.DataFrame(data=[x,y]).transpose()
df.columns=['x','y']

给定 df1,我想创建一个新的 df2,以便输出为:

>>>print(df2)
x         y
0       57000     2.78745
1       57250     2.74425
2       57500     2.70106
3       57750     2.72185
4       58000     2.93666
5       58250     2.34479
6       58500     1.67233
7       58750     2.13959
8       59000     2.31422
9       59250     2.47805
10      59500     2.58523
11      59750     2.69242
12      60000     2.97746
13      60250     3.28227
14      60500     3.18627
15      60750     3.04574
16      61000     3.04658
17      61250     3.25947
18      61500     3.62019
19      61750     4.10685
20      62000     4.59351

对于 Python 中的插值,您可以使用scipy.interpolate.InterpolatedUnivariateSpline

import numpy as np
from scipy.interpolate import InterpolatedUnivariateSpline
x = [57136,57688,58046,58480,58730,59210,59775,60275,60900,61365,62030]
y = [3.87, 3.55, 3.75, 2.04, 2.66, 3.1, 3.38, 4.13, 3.7, 4, 5.78]
interpolation_function = InterpolatedUnivariateSpline(x,y)
new_x = np.arange(57000,62001,250)
new_y = interpolation_function(new_x)

输出将是 numpy 数组,然后可以将其放入熊猫数据帧中。

这肯定不会让你得到你在答案中指示的值,因为原始y值都在 [2, 6] 范围内,所以人们会期望输出也在这个范围内(对于插值(,正如 @Prune 所指出的那样。

默认情况下,插值单变量样条允许外推(请参阅ext参数(。如果你想要线性插值而不是三次插值(k=3,默认值(,你可以指定k=1作为参数。

Pandas 也有自己的插值方法interpolate如果你的起点是数据帧,你可以使用它

相关内容

  • 没有找到相关文章

最新更新