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
相关产品推荐
相关产品推荐

