Sep-21-2019, 11:24 AM
I would like to fit an exponential function based on data points of more than one trend. Is this possible?
The code below creates a fit for every column in the table but if I want to group these columns according to a certain criteria so say the points in column A, B and C needs to learn the same exponential fit, i am not very sure how to do incorporate that requirement here. Thanks.
The code below creates a fit for every column in the table but if I want to group these columns according to a certain criteria so say the points in column A, B and C needs to learn the same exponential fit, i am not very sure how to do incorporate that requirement here. Thanks.
# Initial parameter guess, just to kick off the optimization
init = (0.1, 0.1)
# Place to store function parameters for each column
col_params = {}
def func(x, a, b):
return a*np.exp(-b*x)
# Curve fit each column
for col in df.columns:
# Get x & y
x = df.index.astype(float).values
y = df[col].values
# Curve fit column and get curve parameters
params = curve_fit(func, x, y, init)
# Store optimized parameters
col_params[col] = params[0]
# Extrapolate each column
for col in df.columns:
# Get the index values for NaNsY in the column
x = df[pd.isnull(df[col])].index.astype(float).values
y = df[col].values
# Extrapolate those points with the fitted function
df[col][x] = func(x, *col_params[col])
plt.plot(x1,y,func(x, *col_params[col]),'g--')
