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

Polars:如何统计两指定列均空/均非空的行计数及占比

Polars实现两列均空/均非空的行统计与占比计算

需要实现类似以下SQL的分组统计功能:

SELECT
     Field_A
     ,COUNT(*) as Row_Count
     ,SUM(CASE WHEN FIELD_B IS NULL AND FIELD_C IS NULL THEN 1 ELSE 0 END) as Both_Null_Count

即按指定列分组后,统计每组的总行数,以及两列均为空或均已填充的行数,进而计算占比。

原代码问题分析

使用(pl.col(...) & pl.col(...)).count()会统计该布尔列的总行数(无论值为True/False),因此结果会和Row_Count完全一致,导致三列输出数值相同。

正确实现代码

df_all_cols = df_all_cols.group_by(lineage_fields)\
    .agg(
        pl.len().alias('Row_Count'),
        # 统计两列均为空的行数
        (pl.col('TRACKING').is_null() & pl.col('ORDER NUMBER').is_null()).sum().alias('Both_Null_Count'),
        # 统计两列均非空的行数
        (pl.col('TRACKING').is_not_null() & pl.col('ORDER NUMBER').is_not_null()).sum().alias('Both_NotNull_Count'),
        # 可选:计算均空行的占比
        ((pl.col('TRACKING').is_null() & pl.col('ORDER NUMBER').is_null()).sum() / pl.len()).alias('Both_Null_Ratio'),
        # 可选:计算均非空行的占比
        ((pl.col('TRACKING').is_not_null() & pl.col('ORDER NUMBER').is_not_null()).sum() / pl.len()).alias('Both_NotNull_Ratio')
    )

代码说明

  • pl.len():直接获取分组后的总行数,对应SQL中的COUNT(*)
  • (condition).sum():Polars中布尔值True等价于1,False等价于0,sum会累加所有符合条件(值为True)的行,完全对应SQL中SUM(CASE ...)的逻辑
  • 占比计算:用符合条件的行数除以总行数,即可得到目标行的占比

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:58:22