基于熊猫中列和行值的互相关值

时间:2020-05-22 09:39:25

标签: python pandas

我的数据框如下

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。

1 个答案:

答案 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

相关问题