You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Polars计算DataFrame数值列的两两Pearson相关系数?

计算Polars DataFrame中数值列的两两Pearson相关系数

方法一:直接使用Polars内置的corr()方法

这是最简便高效的方式,Polars已经封装了相关矩阵的计算逻辑:

  1. 筛选出除date列外的所有数值列
  2. 调用corr()方法直接生成相关矩阵

示例代码:

import polars as pl

# 假设你的DataFrame名为df
# 筛选出所有非date列的数值列
numeric_df = df.select(pl.exclude("date"))
# 计算相关矩阵
corr_matrix = numeric_df.corr()

# 查看结果
print(corr_matrix)

该方法会直接返回一个以数值列为行和列的DataFrame,每个单元格对应两列的Pearson相关系数。

方法二:手动生成列对并计算(符合你的笛卡尔积思路)

如果需要更灵活的控制(比如只计算部分列对),可以手动生成所有列的笛卡尔积,再用pearson_corr表达式计算:

import polars as pl
from itertools import product

# 获取所有非date列的名称
numeric_cols = df.select(pl.exclude("date")).columns
# 生成所有列的两两组合(包括自身与自身的组合)
column_pairs = list(product(numeric_cols, repeat=2))

# 计算每对列的相关系数并重塑为矩阵
corr_df = (
    df
    .select(
        # 为每对列生成对应的相关系数表达式
        pl.lit(col1).alias("col1"),
        pl.lit(col2).alias("col2"),
        pl.pearson_corr(col1, col2).alias("correlation")
        for col1, col2 in column_pairs
    )
    # 合并结果行
    .explode(["col1", "col2", "correlation"])
    # 透视成矩阵格式
    .pivot(index="col1", columns="col2", values="correlation")
)

print(corr_df)

注意事项

  • pearson_corr会自动忽略包含缺失值的行,若需处理缺失值,可先使用df.drop_nulls()或df.fill_null()预处理
  • 内置的corr()方法性能更优,因为Polars会对整个矩阵计算做优化,推荐优先使用

内容的提问来源于stack exchange,提问作者seymore_strongboy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 06:11:06