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

如何在Polars DataFrame中按关联特征的中位数填充空值?

在Polars中按分组中位数填充空值的实现方法

针对你需要按IMDB Score分组,用组内Meta Score的中位数填充空值的需求,Polars提供了两种简洁高效的实现方式,以下是具体代码和说明:

方法一:使用窗口函数(推荐)

这种方式利用Polars的窗口函数over直接在原DataFrame上操作,无需额外的分组聚合与连接操作,代码更简洁且性能更优:

df = df.with_columns(
    pl.col("Meta Score").fill_null(
        pl.col("Meta Score").median().over("IMDB Score")
    )
)

代码解释:

  • with_columns:用于修改或添加DataFrame中的列
  • fill_null:指定空值的填充规则
  • pl.col("Meta Score").median().over("IMDB Score"):通过窗口函数over按IMDB Score分组,计算每组Meta Score的中位数,并用该值填充组内的空值

执行后得到的结果如下:

┌──────┬────────────┬────────────┐
│ Name ┆ IMDB Score ┆ Meta Score │
│ ---  ┆ ---        ┆ ---        │
│ str  ┆ i64        ┆ f64        │
╞══════╪════════════╪════════════╡
│ B    ┆ 8          ┆ 86.0       │
│ C    ┆ 8          ┆ 90.0       │
│ D    ┆ 8          ┆ 90.0       │
│ E    ┆ 8          ┆ 91.0       │
│ D    ┆ 7          ┆ 66.0       │
│ D    ┆ 3          ┆ 44.0       │
└──────┴────────────┴────────────┘

方法二:分组聚合后连接

如果你更习惯类似Pandas的分组-聚合-填充逻辑,也可以先计算各组的中位数,再通过连接操作填充空值:

# 1. 计算每组的Meta Score中位数
median_groups = df.group_by("IMDB Score").agg(
    pl.col("Meta Score").median().alias("Group Median")
)

# 2. 左连接原数据,填充空值后删除临时列
df = df.join(median_groups, on="IMDB Score").with_columns(
    pl.col("Meta Score").fill_null(pl.col("Group Median"))
).drop("Group Median")

与Pandas写法的对比

对比你提供的Pandas代码:

df.to_pandas().groupby('IMDB Score')['Meta Score'].apply(lambda x: x.fillna(x.median()))

Polars的窗口函数写法无需使用apply这类非向量化操作,避免了隐式循环,在处理大数据集时性能优势更明显,同时代码结构更直观。

内容的提问来源于stack exchange,提问作者Regular Tech Guy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:30:54