计算大数据框前30列的两两相关性并提取Top5高相关列对
嘿,我懂你需求了——手里有个314列的超大DataFrame,只想盯着前30列找相关性最强的5组列对,之前搜的方法都不适用对吧?那我给你一套精准的解决方案:
一步步实现目标
1. 先提取前30列的子数据集
没必要处理整个314列的大表,先把需要聚焦的前30列单独拎出来,节省计算资源:
top30_data = data.iloc[:, :30]
2. 计算相关系数矩阵
用pandas的.corr()方法生成前30列的相关系数矩阵。考虑到你提到部分单元格可能有缺失值,这里可以通过min_periods参数设置最少需要的非缺失观测数,避免因为缺失值过多报错:
# 默认用皮尔逊相关,也可以换成'spearman'或'kendall'适配不同数据类型 corr_matrix = top30_data.corr(method='pearson', min_periods=1)
3. 转换结构并筛选Top5列对
默认的对称矩阵形式不方便找排名,我们把它转成「列对-相关系数」的Series结构,再去掉无意义的自相关对(对角线的1值),最后按绝对值降序取前5:
# 把矩阵堆叠成Series,索引是(列名A, 列名B)的元组 corr_pairs = corr_matrix.stack() # 过滤掉列名相同的自相关对(比如col1和col1的相关系数) corr_pairs = corr_pairs[corr_pairs.index.get_level_values(0) != corr_pairs.index.get_level_values(1)] # 按相关系数的绝对值降序排序,取前5组 top5_corr_pairs = corr_pairs.abs().sort_values(ascending=False).head(5)
4. 查看带正负号的原始结果
如果你想保留相关系数的正负(知道是正相关还是负相关),可以用下面的代码,它会按绝对值排序但保留原始的系数值:
top5_corr_pairs_with_sign = corr_pairs.loc[top5_corr_pairs.index]
运行完上面的代码,直接打印top5_corr_pairs或者top5_corr_pairs_with_sign就能得到你想要的结果啦~
内容的提问来源于stack exchange,提问作者florence-y
相关产品推荐
相关产品推荐

