-2

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

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

    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
4

1 回答 1

1

对于 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 数组,然后可以将其放入 pandas 数据框中。

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

InterpolatedUnivariateSpline 默认允许外推(见ext参数)。如果您想要线性插值而不是三次插值(k=3默认值),您可以指定k=1为参数。

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

于 2017-07-05T17:47:45.180 回答