【发布时间】:2020-04-13 09:08:08
【问题描述】:
我正在尝试将lmfit 参数结果提取为数据框。我通过fit_func 和参数pars 传递1 列x,1 列data 和lmfit 中minimize 函数的输出输出为OrderedDict。
out = minimize(fit_func, pars, method = 'leastsq', args=(x, data))
res = out.params.valuesdict()
res
输出:
OrderedDict([('a1', 12.850309404600393),
('c1', 1346.833513206811),
('s1', 44.22337472274829),
('f1', 1.1275639898142586),
('a2', 77.15732669480884),
('c2', 1580.5712512351947),
('s2', 16.239969775527275),
('f2', 0.8684363668111492)])
我想要在 DataFrames 中使用 pd.DataFrame(res,index=[0]) 实现的输出:
我想快速适应 3 个数据列:
x = d.iloc[:,0]
fit_odict = pd.DataFrame(d.iloc[:,1:4].\
apply(lambda y: minimize(fit_func, pars, method = 'leastsq', args=(x, y))\
.params.valuesdict()),index=[1])
但我在数据框中得到了一系列有序字典:
如何将三个参数结果作为行来获得我想要的输出?有没有更好的方法来应用这个函数?
更新:
在我的解决方案中附加了@M Newville。对于想要从多个数据列d1.iloc[:,1:]快速提取lmfit参数结果的人可能会有所帮助:
def fff(cols):
out = minimize(fit_func, pars, method = 'leastsq', args=(x, cols))
return {key: par.value for key, par in out.params.items()}
results = d1.iloc[:,1:].apply(fff,result_type='expand').transpose()
输出:
【问题讨论】:
标签: pandas dataframe series ordereddictionary lmfit