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

如何在Polars中统计不含缺失值的唯一组合数量?

Polars 统计不含缺失值的多列组合唯一值数量

直接用pl.struct(...).drop_nulls()无效,是因为Polars不会把内部包含null的struct视为null值,所以drop_nulls()无法过滤掉这些组合。要实现排除含缺失值的组合并统计唯一值,只需在表达式中先过滤掉目标列存在null的行,再统计即可:

示例代码

import polars as pl

# 测试数据
df = pl.DataFrame({
    "col1": [1, 2, 2, None, 1],
    "col2": ["a", "b", "b", "c", None]
})

# 统计不含缺失值的组合唯一值数量
result = df.select(
    pl.struct(["col1", "col2"])
    .filter(pl.all_horizontal(pl.col(["col1", "col2"]).is_not_null()))
    .n_unique()
    .alias("foo")
)

print(result)
# 输出:
# shape: (1, 1)
# ┌─────┐
# │ foo │
# │ --- │
# │ u32 │
# ╞═════╡
# │ 2   │
# └─────┘

关键逻辑解释

  • pl.all_horizontal(pl.col(["col1", "col2"]).is_not_null()):逐行检查指定的所有列是否都不为null,返回布尔序列
  • filter(...):只保留所有列都非空的行对应的struct对象
  • 最后调用n_unique()统计有效组合的数量

如果你需要对整个DataFrame先过滤再统计,也可以这样写(本质和表达式方式等价):

result = df.filter(pl.all_horizontal(pl.col(["col1", "col2"]).is_not_null()))
           .select(pl.struct(["col1", "col2"]).n_unique().alias("foo"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 11:12:05