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

如何统计DataFrame指定列滑动窗口区间内的非零值数量

pandas滑动窗口统计指定列非零值个数

直接利用非零判断的布尔值可求和的特性实现,不需要写复杂循环,分两种场景处理:

  • 固定长度滑动窗口(窗口大小统一、步长固定)
    直接用pandas内置的rolling滚动接口实现,性能比手动切片遍历高很多:

    # 替换window_size为你实际需要的窗口长度,比如窗口覆盖5行就填5
    # min_periods=1表示窗口内只要有值就返回统计结果,可根据需求调整为窗口满长才统计
    df["rolling_non_zero_cnt"] = df["data"].rolling(
        window=window_size, 
        min_periods=1
    ).apply(lambda col_slice: col_slice.ne(0).sum(), raw=True)
    

    这里的.ne(0)是pandas原生的“不等于0”判断,返回的布尔序列中True会被按1计算、False按0计算,求和结果就是窗口内非零值的总个数。raw=True参数可以把传入apply的序列转成numpy数组,进一步提升计算速度。

  • 自定义起止索引的不规则窗口
    如果你是手动指定每个窗口的起止索引i、j,直接对你写的切片代码做统计即可:

    non_zero_count = df.loc[i:j, "data"].ne(0).sum()
    

    如果数据中存在NaN空值且你不希望把空值计入非零统计,提前把空值填充为0再判断即可:

    non_zero_count = df.loc[i:j, "data"].fillna(0).ne(0).sum()
    

内容的提问来源于stack exchange,提问作者Felipe Quintero Suárez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:27:35