如何实现两个同结构DataFrame的逐列配对绘图及相关性计算?
更优实现方案:逐列配对绘图与相关系数计算
一、逐列配对散点图优化实现
无需合并为双层列头DataFrame,直接利用两个DataFrame列名完全一致的特性,循环列名即可快速绘制子图,代码更简洁直观:
import matplotlib.pyplot as plt # 获取列名列表 cols = df_X.columns # 创建对应数量的子图 fig, axes = plt.subplots(len(cols), 1, figsize=(6, 4 * len(cols))) # 循环列名与子图,绘制散点图 for col, ax in zip(cols, axes): ax.scatter(df_X[col], df_Y[col]) ax.set_title(f'{col}: X vs Y') ax.set_xlabel('X') ax.set_ylabel('Y') # 自动调整子图间距 plt.tight_layout() plt.show()
二、逐列相关系数简化计算
方法1:一行搞定的高效计算
使用pandas内置的corrwith()方法,直接计算两个DataFrame对应列的皮尔逊相关系数,无需手动循环:
import pandas as pd # 计算对应列的相关系数 corr_results = df_X.corrwith(df_Y) print(corr_results)
输出示例:
A 1.0 B 1.0 C 1.0 dtype: float64
方法2:自定义相关系数类型
如果需要使用斯皮尔曼(spearman)或肯德尔(kendall)相关系数,可循环列名自定义计算:
corr_dict = {} for col in df_X.columns: # 替换method参数为'spearman'或'kendall'即可切换类型 corr_dict[col] = df_X[col].corr(df_Y[col], method='pearson') # 转换为Series格式,便于查看和后续处理 corr_series = pd.Series(corr_dict)
内容的提问来源于stack exchange,提问作者Pete
相关产品推荐
相关产品推荐

