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

如何在Polars中对分组后的数据进行过滤?

Polars分组筛选组内符合均值条件的数值

你当前的代码仅生成了每个组内C列数值是否大于等于组均值的布尔列表,并未筛选出符合条件的原始数值。要实现目标,可以用以下两种简洁方法:

方法一:窗口函数计算均值后筛选聚合

import polars as pl

df = pl.DataFrame({
    'A' : ['foo', 'bar', 'foo', 'bar', 'foo', 'bar'], 
    'B' : ['one', 'one', 'two', 'three', 'two', 'two'], 
    'C' : [1, 5, 5, 2, 5, 7], 
    'D' : [2.0, 5., 8., 1., 2., 9.]
})

result = df.with_columns(
    # 按A分组计算C列均值,添加为新列
    pl.col("C").mean().over("A").alias("C_mean")
).filter(
    # 筛选C列大于等于组均值的行
    pl.col("C") >= pl.col("C_mean")
).group_by("A").agg(
    # 聚合符合条件的C列数值
    pl.col("C")
)

print(result)

方法二:聚合时直接筛选(更简洁)

result = df.group_by("A").agg(
    # 在聚合上下文里,直接筛选C列中大于等于组内均值的数值
    pl.col("C").filter(pl.col("C") >= pl.col("C").mean())
)

print(result)

两种方法都会得到你期望的结果:

shape: (2, 2)
┌─────┬───────────┐
│ A   ┆ C         │
│ --- ┆ ---       │
│ str ┆ list[i64] │
╞═════╪═══════════╡
│ foo ┆ [5, 5]    │
│ bar ┆ [5, 7]    │
└─────┴───────────┘

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:32:13