从有序字典作为行的系列中创建熊猫数据框

问题描述 投票:0回答:2

我正在尝试将lmfit参数结果提取为数据帧。我通过x和参数data传递1列fit_func,1列[C​​0]和pars输出中的minimize函数的输出作为OrderedDict。

lmfit

输出:

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个要快速适应的数据列:

desired_out

但是我得到了一系列有序字典作为数据框中的行:

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])

如何使用三个参数结果作为行来获取所需的输出?有没有更好的方法来应用该功能?

UPDATE:

在我的解决方案中附加了@M Newville。对于想要从多个数据列out_2中快速提取lmfit参数结果的用户可能会有所帮助。

d1.iloc[:,1:]

输出:

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()

我正在尝试将lmfit参数结果提取为数据帧。我通过fit_func和参数pars传递1列x,1列数据,并在lmfit输出中将最小化函数的输出传递为...

pandas dataframe series ordereddictionary lmfit
2个回答
1
投票

单身适合,这可能是您要寻找的:


0
投票

这是您可以做的快速解决方案。代码效率不高,但是您可以对其进行优化。请注意,索引从1开始,但是欢迎您使用pandas库重新索引。

results = {key: [] for key in pars}
for data in datasets:
    out = minimize(fit_func, pars, method='leastsq', args=(x, data))
    for par_name, val_list in results.items():
        val_list.append(out.params[par_name].value)
results = pd.DataFrame(results)
© www.soinside.com 2019 - 2024. All rights reserved.