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
相关产品推荐
相关产品推荐

