如何在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
相关产品推荐
相关产品推荐

