You need to enable JavaScript to run this app. 如何统计Pandas列指定长度滑动窗口内-1的数量
优惠活动
大模型
产品
解决方案
定价
更多

如何统计Pandas列指定长度滑动窗口内-1的数量

实现方案

完全可以通过pandas的rolling方法实现需求,向量化运算的写法效率远高于自定义lambda,具体如下:

核心思路

  • 将mod1列的异常值(-1)映射为1、正常值(1)映射为0,直接对滑动窗口求和即可得到窗口内的异常个数
  • 配置min_periods=1参数保证窗口长度不足p时也会返回计算结果,匹配你给出的输出示例

完整可运行代码

import pandas as pd

# 你的示例数据
df = pd.DataFrame({'mod1': [1, 1, 1, -1, -1, 1, -1, -1, -1]})
p = 3  # 自定义滑动窗口长度

# 核心实现逻辑
df['n_anomalies_p'] = (df['mod1'] == -1).astype(int)\
                      .rolling(window=p, min_periods=1)\
                      .sum()\
                      .astype(int)

可选lambda写法

如果你需要用lambda自定义计算逻辑,也可以用如下写法,输出结果和上面完全一致:

df['n_anomalies_p'] = df['mod1'].rolling(window=p, min_periods=1)\
                      .apply(lambda window: (window == -1).sum())\
                      .astype(int)

参数说明

  • window=p:指定滑动窗口的长度为p
  • min_periods=1:只要窗口内有至少1个元素就计算结果,若去掉该参数,前p-1行的统计结果会返回空值NaN,你可以根据实际需求调整
  • 两种写法的输出结果完全匹配你给出的示例:[0, 0, 0, 1, 2, 2, 2, 2, 3]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 12:54:04