我有如下数据框
Prs 10 20 30 40 50
5 40 40 40 40 40
10 100 100 100 100 100
15 150 150 150 150 150
25 256 256 260 264 268
40 291 291 293 296 300
[第一列是pressure
,其余列是temperature
。表格中的值为“速度”。我们阅读此表的方式是在5压力和10的温度下,速度是40。类似地,在25压力和40的温度下,速度是264。
但是,我想知道如何获得压力和温度的速度,这些速度未在表中明确列出,但在表中提到的范围内。例如,压力12.6和温度21.2的速度是多少?我怎么做?我可以尝试以0.1的间隔来推断压力列,以0.1的间隔推断温度,然后填充值,但这会使该表过于繁琐和复杂。
还有其他方法吗?熊猫的关联函数在这里派上用场吗?请指导。注:例如,在完整表中,一段时间之间的速度也会降低。例如,当prs = 90&temp = 75时,速度为515,但是当prs = 90&temp = 85时,速度为480。
这是2D插值。这样做之后,无论是熊猫还是麻木。如果值得的话,您可以安装完整的scipy软件包,然后使用scipy.interpolate.interp2d
:
val = scipy.interpolate.interp2d(df['Prs'].values, df.columns[1:].astype('int').value,
df.iloc[:, 1:].values)(12.6, 21.2)
这将使用线性插值,但是scipy提供了各种样条方法,只需查看doc
如果没有安装完整的程序,则可以先在压力值处插入列[[手动,然后在温度值处插入结果数组:
def interp(x,y):
it = [np.interp(x, df['Prs'], df.iloc[:, i]) for i in range(1, len(df.columns))]
return np.interp(y, df.columns[1:].astype('float'), it)
interp(12.6, 21.2)
预期返回126.0