我的数据框如下
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。
答案 0 :(得分:1)
这是2D插值。无论是熊猫还是numpy,都无法做到这一点。如果值得的话,您可以安装完整的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