我想创建一个新的df,给定起始值x0和结束值x1,输出对给定的n个点进行插值/外推。
例如,给定下面的df,我想在步长为250或n = 21点的x0 = 57000和x1 = 62000之间创建一个新的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
答案 0 :(得分:0)
对于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,您可以使用它;