如何使用Polars API实现按行聚合操作(如sum、median等)
Polars 按行聚合实现方案
以下是对应你给出的Pandas示例的Polars实现方式:
1. 筛选行和大于5的记录
Polars中可以用pl.sum_horizontal()函数计算每行的总和,再结合filter()完成筛选:
import polars as pl df = pl.DataFrame([[1, 2, 1], [4, 5, 3], [1, 8, 9]]) # 筛选行总和大于5的行 filtered_df = df.filter(pl.sum_horizontal(pl.all()) > 5) print(filtered_df) # 输出: # shape: (2, 3) # ┌─────┬─────┬─────┐ # │ 0 ┆ 1 ┆ 2 │ # │ --- ┆ --- ┆ --- │ # │ i64 ┆ i64 ┆ i64 │ # ╞═════╪═════╪═════╡ # │ 4 ┆ 5 ┆ 3 │ # │ 1 ┆ 8 ┆ 9 │ # └─────┴─────┴─────┘
2. 添加行中位数列
使用pl.median_horizontal()计算每行中位数,通过with_columns()新增列:
# 新增行中位数列 df_with_median = df.with_columns(median=pl.median_horizontal(pl.all())) print(df_with_median) # 输出: # shape: (3, 4) # ┌─────┬─────┬─────┬────────┐ # │ 0 ┆ 1 ┆ 2 ┆ median │ # │ --- ┆ --- ┆ --- ┆ --- │ # │ i64 ┆ i64 ┆ i64 ┆ f64 │ # ╞═════╪═════╪═════╪════════╡ # │ 1 ┆ 2 ┆ 1 ┆ 1.0 │ # │ 4 ┆ 5 ┆ 3 ┆ 4.0 │ # │ 1 ┆ 8 ┆ 9 ┆ 8.0 │ # └─────┴─────┴─────┴────────┘
3. 行方向滚动窗口均值
Polars的滚动函数支持直接指定axis=1实现行方向计算,无需转置:
# 行方向窗口大小为3的滚动均值 rolling_df = df.with_columns( pl.all().rolling_mean(window_size=3, axis=1) ) print(rolling_df) # 输出: # shape: (3, 3) # ┌──────┬──────┬───────────┐ # │ 0 ┆ 1 ┆ 2 │ # │ --- ┆ --- ┆ --- │ # │ f64 ┆ f64 ┆ f64 │ # ╞══════╪══════╪═══════════╡ # │ null ┆ null ┆ 1.333333 │ # │ null ┆ null ┆ 4.0 │ # │ null ┆ null ┆ 6.0 │ # └──────┴──────┴───────────┘
核心要点
- 基础行聚合操作(求和、中位数等):使用Polars提供的
*_horizontal系列函数,比如sum_horizontal、max_horizontal、median_horizontal,这些函数专门用于行方向的聚合计算。 - 滚动类行操作:直接在列表达式上调用滚动方法(如
rolling_mean)并指定axis=1即可,无需像Pandas那样转置处理。
内容的提问来源于stack exchange,提问作者iliya malecki
相关产品推荐
相关产品推荐

