You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何将DataFrame输入行与fsolve求解结果合并为10列数据集?

问题:合并DataFrame输入行与计算结果为10列数据集

现有如下输入DataFrame:

import pandas as pd
import numpy as np
from scipy.optimize import fsolve

df = pd.read_csv('path/testfile.csv', delimiter='\t', header=None)
print(df)

输出的DataFrame内容:

0         1         2         3         4         5
0   0.227996  0.337029  0.238164  0.183009  0.085747  0.134129
1   0.247891  0.335556  0.272129  0.187329  0.085921  0.128372
2   0.264761  0.337778  0.245918  0.183212  0.080493  0.122786
3   0.305061  0.337778  0.204265  0.208453  0.071558  0.083683
4   0.222749  0.337029  0.209715  0.084253  0.142014  0.234673
5   0.190816  0.337029  0.291872  0.041575  0.463764  0.053193
6   0.299625  0.337029  0.206064  0.200905  0.072955  0.092528
7   0.259740  0.340045  0.202792  0.156021  0.087506  0.148796

通过以下代码基于该DataFrame计算结果:

def f2_bis(z, Ai, Bi, Ci, Di, Ei, Fi, Hi):
    a, b, c, d = z
    return np.array([
        Ai*a*((1-c)*Bi+(b-d)*Ci)-Di,
        Ei+a*c*d*b,
        Fi+Hi*c*a*d+b,
        Hi+Fi+Ei*a*b*c*d
    ])

# 拆分各列到变量
A, B, C ,D, E, F = df.to_numpy().T
H = 1-A

# 逐行计算结果
res = [
    fsolve(f2_bis, [1,1,1,1], args=(Ai, Bi, Ci, Di, Ei, Fi, Hi))
    for Ai, Bi, Ci, Di, Ei, Fi, Hi in zip(A, B, C, D, E, F, H)
]

当前res的输出为:

[array([ 1.25482583, -0.32608114, -0.17861197, -0.98296457]),
 array([ 0.70750447, -0.41512857, -0.30218114, -1.80533338]),
 array([-2.91283478, -0.41076736,  1.41022472, -0.09615889]),
 array([ 2.87736785,  0.25256582,  0.6107988 , -0.26507222]),
 array([-0.532438  ,  0.34016552,  6.64918304,  0.18908195]),
 array([ 1.1062844 ,  0.73110855, -0.65958519,  1.32070547]),
 array([1., 1., 1., 1.]),
 array([1., 1., 1., 1.])]

需求:将每行的6列输入数据与对应的4列计算结果合并,得到每行含10列的数据集,期望输出格式如下:

[array([ 0.227996, 0.337029, 0.238164,0.183009, 0.085747, 0.134129, 1.25482583, -0.32608114, -0.17861197, -0.98296457]),
 array([ 0.247891, 0.335556, 0.272129, 0.187329, 0.085921, 0.128372, 0.70750447, -0.41512857, -0.30218114, -1.80533338]),
 array([0.264761, 0.337778, 0.245918, 0.183212, 0.080493, 0.122786, -2.91283478, -0.41076736,  1.41022472, -0.09615889]),
 array([0.305061, 0.337778, 0.204265, 0.208453, 0.071558, 0.083683, 2.87736785,  0.25256582,  0.6107988 , -0.26507222]),
 array([0.222749, 0.337029, 0.209715, 0.084253, 0.142014, 0.234673, -0.532438  ,  0.34016552,  6.64918304,  0.18908195]),
 array([0.190816, 0.337029, 0.291872, 0.041575, 0.463764, 0.053193, 1.1062844 ,  0.73110855, -0.65958519,  1.32070547]),
 array([0.299625, 0.337029, 0.206064, 0.200905, 0.072955, 0.092528, 1., 1., 1., 1.]),
 array([0.259740, 0.340045, 0.202792, 0.156021, 0.087506, 0.148796, 1., 1., 1., 1.])]

解决方案

方法1:循环内逐行拼接

修改原循环逻辑,在计算每行结果的同时,将输入行数据与结果拼接:

df_np = df.to_numpy()
A, B, C, D, E, F = df_np.T
H = 1 - A

combined_res = [
    np.hstack((df_np[i], fsolve(f2_bis, [1,1,1,1], args=(Ai, Bi, Ci, Di, Ei, Fi, Hi))))
    for i, (Ai, Bi, Ci, Di, Ei, Fi, Hi) in enumerate(zip(A, B, C, D, E, F, H))
]

方法2:批量拼接(高效)

若已得到res列表,可转为数组后与原数据批量合并:

res_np = np.array(res)
combined_np = np.hstack((df.to_numpy(), res_np))
combined_res = list(combined_np)

方法3:生成结构化DataFrame(可选)

如果需要便于后续分析的结构化数据,可直接生成新DataFrame:

res_np = np.array(res)
new_cols = [f'res_{idx}' for idx in range(res_np.shape[1])]
combined_df = pd.DataFrame(
    np.hstack((df.to_numpy(), res_np)),
    columns=df.columns.tolist() + new_cols
)

这三种方法均可生成目标格式的10列数据集,批量拼接的方法在数据量较大时性能更优。


内容的提问来源于stack exchange,提问作者Luker354

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 21:09:32