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

Polars DataFrame无std_horizontal函数,如何计算指定列行标准差?

解决Polars中计算行标准差的问题

Polars目前没有内置的std_horizontal函数,你可以通过以下两种实用方式实现指定列的行级标准差计算:

方法一:使用pl.row()函数(推荐)

利用row()函数选取目标列后直接调用std()方法,这是最简洁的实现方式,还支持通过ddof参数控制自由度(默认值为1,对应样本标准差;设为0则计算总体标准差):

import polars as pl
df = pl.DataFrame(
    {
        "foo": [1, 2, 3],
        "bar": [6, 7, 8],
        "ham": ["a", "b", "c"],
    }
)

# 计算样本行标准差(ddof=1)
df = df.with_columns(
    pl.row(['foo', 'bar']).std().round(2).alias('std')
)

# 计算总体行标准差(ddof=0)
df = df.with_columns(
    pl.row(['foo', 'bar']).std(ddof=0).round(2).alias('pop_std')
)

方法二:手动实现标准差公式

如果需要更精细的逻辑控制,可以基于标准差的数学公式手动计算,步骤为:计算行均值→计算每个值与均值的差的平方→求平均→开平方:

df = df.with_columns(
    # 先计算行均值
    pl.mean_horizontal('foo', 'bar').alias('row_mean'),
    # 手动计算样本标准差:sqrt(Σ(x-μ)²/(n-1)),n为参与计算的列数
    (
        ((pl.col('foo') - pl.col('row_mean'))**2 + 
         (pl.col('bar') - pl.col('row_mean'))**2) / (2-1)
    ).sqrt().round(2).alias('std_manual')
)

两种方法都能得到一致的结果,其中pl.row()的写法更简洁易读,适合大多数场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:55:02