Python экспоненциальная подгонка кривой в pandas: определение параметров функции для каждой строки - PullRequest
0 голосов
/ 09 апреля 2020

my dataframe [11 x 300], где заголовок столбца равен 'x' ([0.75,1,1.25,1.5,1.75,2,2.25,2.5,2.75,3,3.25]), и каждое значение строки представляет «у» для. Каждая строка может быть описана экспоненциальной функцией в следующем формате: a * x ^ k + b.

Цель состоит в том, чтобы добавить три дополнительных столбца, описывающих a, k и b для этой указанной строки c , Точно так же как: Python подгонка кривой на pandas кадре данных, затем добавление коэффи- циента к новым столбцам

Вместо полиномиальной функции мои данные должны быть описаны в следующем формате: a * x ** к + б.

Поскольку я не могу найти никакого решения для получения коэффициентов с помощью np.polyfit, я разбил свой фрейм данных на разные списки.


x  = np.array([0.75,1,1.25,1.5,1.75,2,2.25,2.5,2.75,3,3.25])
y1  = np.array([288.79,238.32,199.42,181.22,165.50,154.74,152.25,152.26,144.81,144.81,144.81])
y2 = np.array([309.92,255.75,214.02,194.48,177.61,166.06,163.40,163.40,155.41,155.41,155.41])
...
y300 = np.array([352.18,290.63,243.20,221.00,201.83,188.71,185.68,185.68,176.60,176.60,176.60])

def func(x,a,k,b):
    return a * (x**k) + b

popt1, pcov = curve_fit(func,x,y1, p0 = (300,-0.5,0))
...
popt300, pcov = curve_fit(func,x,y300, p0 = (300,-0.5,0))

output: 
popt1 
[107.73727907  -1.545475   123.48621504]
...
popt300
[131.38411712  -1.5454452  150.59522147

Это работает, когда я разбиваю все строки данных в списках и определяю popt для каждого списка / строки. Избегайте разделения всех 300 столбцов - я предпочитаю применять ту же методологию, что и Python подгонка кривой на pandas кадре данных, затем добавить коэффицент к новым столбцам


my_coep_array = pd. DataFrame (np.polyfit (x, df.values, 1)). T


Но как определить мой np.polyfit - a * x ** k + b?

...