如何将输入参数运算结果逐行存入Pandas DataFrame?
问题解决:逐行匹配参数与数值列表运算并生成DataFrame
你当前代码的问题在于每次循环都直接给整列赋值(比如df['Events'] = ...),这会覆盖掉之前所有行的数值,最后整个列只会保留最后一次循环的计算结果。以下是两种解决方案,其中第二种更适合大规模数据集:
方案1:修正循环逻辑(小数据集适用)
直接在循环中定位到具体的行和列进行赋值,而非修改整列:
import pandas as pd N = 2 df = pd.DataFrame(columns=['Events','Electrons','Photons'], index=range(N)) vals = [1,2,3] param = [1,2] for idx in df.index: df.loc[idx, 'Events'] = param[idx] + vals[0] df.loc[idx, 'Electrons'] = param[idx] + vals[1] df.loc[idx, 'Photons'] = param[idx] + vals[2]
方案2:向量化运算(大数据集最优)
利用NumPy的广播机制避免循环,大幅提升运算效率,适合扩展到大规模数据场景:
import pandas as pd import numpy as np vals = [1,2,3] param = [1,2] # 将param转为列向量,与vals进行广播相加,得到每行对应参数的运算结果 result = np.array(param)[:, np.newaxis] + np.array(vals) # 直接将结果数组转为DataFrame df = pd.DataFrame(result, columns=['Events','Electrons','Photons'])
原理说明:np.array(param)[:, np.newaxis]将param转换为形状为(N,1)的列数组,和形状为(3,)的vals相加时,NumPy会自动完成广播扩展,生成(N,3)的结果数组,正好对应每行一个param元素与所有vals的运算结果,无需提前创建空DataFrame,代码更简洁高效。
内容的提问来源于stack exchange,提问作者Austin
相关产品推荐
相关产品推荐

