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

如何在Polars中计算数值列的横向中位数

如何在Polars中计算数值列的横向中位数

我明白你的需求——Polars目前确实没有内置的median_horizontal函数,不过我们可以用行级的列表操作来实现和mean_horizontal逻辑一致的横向中位数计算,而且同样会自动忽略空值。

这里有个最直接的纯Polars方案,不需要依赖其他库:

result = df.with_columns(
    # 把每行的Int64列打包成列表,再计算列表的中位数
    pl.concat_list(pl.col(pl.Int64)).list.median().alias("Horizontal Median")
)
print(result)

执行后会得到以下结果:

shape: (3, 5)
┌─────┬─────┬──────┬─────┬──────────────────┐
│ ABC ┆ A   ┆ B    ┆ C   ┆ Horizontal Median│
│ --- ┆ --- ┆ ---  ┆ --- ┆ ---              │
│ str ┆ i64 ┆ i64  ┆ i64 ┆ f64              │
╞═════╪═════╪══════╪═════╪══════════════════╡
│ foo ┆ 1   ┆ 2    ┆ 1   ┆ 1.0              │
│ bar ┆ 2   ┆ 1    ┆ 2   ┆ 2.0              │
│ foo ┆ 3   ┆ null ┆ 3   ┆ 3.0              │
└─────┴─────┴──────┴─────┴──────────────────┘

方案说明:

  1. pl.concat_list(pl.col(pl.Int64)):把每行中所有Int64类型的列值打包成一个列表,自动跳过空值(和mean_horizontal的空值处理逻辑完全一致)
  2. .list.median():对每行的列表单独计算中位数,完美匹配你需要的横向统计逻辑

如果之后你需要更灵活的自定义处理(比如特殊空值规则),也可以用结构体结合map_elements实现(需要依赖pandas),不过上面的纯Polars方案已经足够满足你的需求,而且性能更优。

备注:内容来源于stack exchange,提问作者miroslaavi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 14:40:29