Pandas实现:滚动窗口内任意前n行满足条件则返回True
在Pandas中基于滚动窗口条件生成新列
解决方案
要实现「滚动窗口内任意一行满足指定条件时返回True,否则返回False」的需求,可按以下步骤操作:
- 生成每行是否满足条件的布尔掩码
- 对掩码使用滚动窗口的
any()方法,判断窗口内是否存在符合条件的行 - 将结果赋值为新列
示例演示
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
相关产品推荐
相关产品推荐

