如何高效计算两个DataFrame对应列的RMSE并生成结果DataFrame
解决方法
高效向量化实现(推荐处理大量列)
直接利用pandas和numpy的向量化运算,无需循环,性能最优:
import pandas as pd import numpy as np # 假设df1和df2已创建完成 # 计算每列的RMSE rmse_values = np.sqrt(((df1 - df2) ** 2).mean()) # 转换为目标DataFrame df3 df3 = pd.DataFrame([rmse_values], columns=df1.columns)
使用sklearn库实现
如果习惯用mean_squared_error函数,可以通过apply按列处理:
from sklearn.metrics import mean_squared_error import pandas as pd import numpy as np # 按列计算RMSE rmse_values = df1.apply(lambda col: np.sqrt(mean_squared_error(col, df2[col.name]))) # 转换为df3 df3 = rmse_values.to_frame().T
说明
- 第一种方法完全基于向量化操作,避免了循环或
apply的额外开销,在处理大量列时速度远快于第二种方法。 - 两种方法最终生成的
df3都会保留原DataFrame的列名,每行对应一组RMSE结果(这里只有一行,因为是两DataFrame对应列的RMSE)。
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

