Я не знаю точно, что делает ваш curve_fit
, но в качестве быстрого примера вы ищете что-то вроде этого:
import pandas as pd
import numpy as np
data = {'treatment': ['A', 'A', 'A', 'B', 'B', 'B'],
'time': [1, 2, 3, 1, 2, 3],
'y': [3, 4, 5, 6, 7, 8],
'std_y': [1.1, 2.1, 3.1, 4.1, 5.1, 6.1]}
df = pd.DataFrame(data=data)
for i, g in df.groupby('treatment'):
def model(t, m, b, n):
return k*np.exp(-m*t) + b*np.exp(-n*t)
k = g.iloc[2].y
print('k:', k, 'model_out:', model(t=1, m=2, b=4, n=4))
fit = curve_fit(model, g['time'], g['y'], sigma=g['std_y'], p0=None)
ans, cov = fit
fit_m, fit_B, fit_n = ans
ПРИМЕЧАНИЕ : как Документация гласит, что функция groupby не меняет порядок наблюдений, поэтому вам следует рассмотреть возможность сортировки набора данных перед его использованием.