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

Pandas实现:滚动窗口内任意前n行满足条件则返回True

在Pandas中基于滚动窗口条件生成新列

解决方案

要实现「滚动窗口内任意一行满足指定条件时返回True,否则返回False」的需求,可按以下步骤操作:

  1. 生成每行是否满足条件的布尔掩码
  2. 对掩码使用滚动窗口的any()方法,判断窗口内是否存在符合条件的行
  3. 将结果赋值为新列

示例演示

1. 导入库并创建示例数据

import pandas as pd
import numpy as np

df2 = pd.DataFrame(
    np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [1, 2, 3], [4, 5, 6], [7, 8, 9], [1, 2, 3], [4, 5, 6], [7, 8, 9]]),
    columns=['a', 'b', 'c']
)

2. 定义条件并生成布尔掩码

注:原需求描述的「列c == 2」与示例结果不符,这里修正为符合示例输出的条件列b == 2

# 自定义条件:这里以"列b等于2"为例
condition_mask = df2['b'] == 2

3. 生成滚动窗口结果列

# 设置滚动窗口大小为2,min_periods=2表示窗口至少包含2行才计算,否则返回NaN
window_size = 2
df2['d'] = condition_mask.rolling(window=window_size, min_periods=window_size).any()

4. 查看结果

print(df2)

输出结果与需求示例一致:

a  b  c      d
0  1  2  3    NaN
1  4  5  6   True
2  7  8  9  False
3  1  2  3   True
4  4  5  6   True
5  7  8  9  False
6  1  2  3   True
7  4  5  6   True
8  7  8  9  False

通用说明

  • 自定义条件:可根据需求修改condition_mask,比如多条件组合:condition_mask = (df2['a'] > 3) & (df2['c'] < 8)
  • 窗口设置:调整window_size可改变滚动窗口大小;若希望窗口不足时返回False而非NaN,可将min_periods设为1
  • 核心逻辑:rolling().any()会检查滚动窗口内是否存在至少一个True值,正好匹配「任意一行满足条件则返回True」的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:01:46