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

Python实现:根据另一列最后n行的条件新增列

解决方法:基于滑动窗口实现条件列生成

假设你用Pandas处理表格数据,以下是两种高效实现思路,核心是通过滑动窗口检查连续n行的条件,再将结果映射到下一行的标记列中。

方法1:Pandas内置滑动窗口(推荐,高效简洁)

import pandas as pd

# 模拟你的列A数据
data = {'A': [30, 20, 22, 24, 23, 35, 28, 26, 27, 29, 21, 22, 23, 24, 30]}
df = pd.DataFrame(data)

n = 3  # 需要检查的连续行数
# 1. 创建滑动窗口,检查窗口内所有值是否<=25
window_result = df['A'].rolling(window=n).apply(lambda x: all(x <= 25), raw=True)
# 2. 将窗口结果向下移位1行,空值填充0并转为整数
df['B'] = window_result.shift(1).fillna(0).astype(int)

print(df)

运行后B列会在第6行(索引5)和第15行(索引14)显示1,完全匹配你的需求。

方法2:手动遍历(适合理解底层逻辑)

如果不想依赖Pandas的内置方法,也可以手动遍历列表实现:

# 模拟列A的原始列表
col_a = [30, 20, 22, 24, 23, 35, 28, 26, 27, 29, 21, 22, 23, 24, 30]
n = 3
col_b = [0] * len(col_a)  # 初始化B列全为0

# 从第n个元素开始遍历(前n-1行凑不够n个连续行)
for i in range(n, len(col_a)):
    # 取当前位置的前n行数据
    window = col_a[i-n:i]
    if all(x <= 25 for x in window):
        col_b[i] = 1

# 转为DataFrame查看结果
df = pd.DataFrame({'A': col_a, 'B': col_b})
print(df)

关键逻辑说明

  • rolling(window=n):生成大小为n的滑动窗口,每次窗口包含当前行及前n-1行的数据
  • apply(lambda x: all(x <=25)):检查窗口内所有元素是否满足<=25的条件,返回布尔值
  • shift(1):将窗口检查结果向下移动一行,让前n行的检查结果对应到第n+1行的B列值
  • 手动遍历的方式更直观,但Pandas的滑动窗口效率更高,适合处理大规模数据集

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:25:33