Как получить значение из таблицы Python, которое будет интерполироваться между столбцами и строками? - PullRequest
0 голосов
/ 21 января 2019

У меня есть таблица (DataFrame), созданная в Pandas.Это 2D таблица с целыми числами в качестве индекса столбца и целыми числами в качестве индекса строки (это position x и position y).Я знаю, как получить значение, которое находится в «ячейке» этой таблицы, используя индексы, но я хотел бы получить значение «между» столбцами и строками, которые будут линейно интерполированы.

Предпочтительно, я бы хотелсделать это для большого числа x, y, которые хранятся в двух таблицах Position_x(m x n), Position_y(m x n) и поместить результаты в таблицу Results(m x n)

https://i.stack.imgur.com/utv03.png

Вот пример такогопроцедура в Excel: https://superuser.com/questions/625154/what-is-the-simplest-way-to-interpolate-and-lookup-in-an-x-y-table-in-excel

Спасибо, Шимон

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Я нашел что-то, что работает на 90%, однако у него есть два недостатка: 1) индекс и столбцы должны строго увеличиваться, 2) для набора из n входных пар он строит массив результатов nxn вместо просто nРезультаты (например, ниже для 3 пар входных точек мне нужно только 3 результирующих значения, используя этот код, я получу 9 значений как все комбинации входных точек).

Вот что я нашел:

import scipy
import scipy.interpolate
import numpy as np
import pandas as pd

x=np.array([0,10,25,60,100])       #Index
y=np.array([1000,1200,1400,1600])  #Column

data=np.array([[60,54,33,0],
              [50,46,10,0],
              [42,32,5,0],
              [30,30,2,0],
              [10,10,0,0]])

Table_to_Interpolate=pd.DataFrame(data,index=x,columns=y)
sp=scipy.interpolate.RectBivariateSpline(x,y,data, kx=1, ky=1, s=0)
scipy.interpolate.RectBivariateSpline(x,y,data, kx=1, ky=1, s=0)
Input_Xs=12, 44, 69
Input_Ys=1150, 1326, 1416

Results=pd.DataFrame(sp(Input_Xs, Input_Ys), index=Input_Xs, columns=Input_Ys,)

Это не идеально, но это лучшее, что я мог найти.

0 голосов
/ 21 января 2019

Если я понял ваш вопрос:

вы можете начать с использования pandas.melt , чтобы преобразовать таблицу результатов с несколькими столбцами в таблицу результатов с одним столбцом.

Затем вы можете использовать ben-t great answer для интерполяции.

Надеюсь, я помог.

...