如何使用Polars实现与Pandas一致的十列间相关性计算效果?
在Polars中实现Pandas相关性计算逻辑
原Pandas代码逻辑回顾
你之前的Pandas代码完成了以下操作:
- 仅计算DataFrame中数值列的相关系数矩阵
- 将矩阵堆叠为长格式(MultiIndex索引的Series)
- 按相关系数降序排序
- 过滤掉相关系数等于1的行(即列与自身的相关性)
Polars实现代码
以下是完全对齐原逻辑的Polars代码:
import polars as pl # 1. 选择数值列并计算相关系数矩阵 corr_matrix = df.select(pl.col(pl.NUMERIC_DTYPES)).corr() # 2. 将矩阵转为长格式(对应Pandas的stack操作) corr_long = ( corr_matrix .with_row_index("col1") # 将行名转为列,作为第一列 .unpivot(index="col1", variable_name="col2", value_name="correlation") # 宽表转长表 ) # 3. 按相关系数降序排序 + 4. 过滤掉相关系数等于1的行 result = corr_long.sort("correlation", descending=True).filter(pl.col("correlation") < 1) # 可选:设置双索引,更贴近Pandas输出格式 result = result.set_index(["col1", "col2"]) print(result)
关键细节说明
pl.col(pl.NUMERIC_DTYPES)等价于Pandas的numeric_only=True,仅筛选数值类型列with_row_index + unpivot对应Pandas的stack(),将宽格式相关矩阵转为包含两两列对及对应相关性的长格式- Polars的
corr()方法默认使用Pearson相关系数,与Pandas默认行为一致 - 最终结果的排序、过滤逻辑完全匹配原代码,输出内容与Pandas版本一致
内容的提问来源于stack exchange,提问作者Arthur Zhang
相关产品推荐
相关产品推荐

