在DataFrame中基于后续连续行条件查找目标列值
在DataFrame中基于后续连续行条件查找目标列值
嘿,我明白你要做的事儿了——就是找出那些Inst值,它们之后连续5次迭代的Error都能稳稳低于2.5对吧?之前的方法没跑通,大概率是没处理好“连续后续行”的窗口方向或者边界问题,我给你整几个实用的纯pandas方案,直接能用~
先明确需求细节
先确认下:你要找的是当某个Inst出现后,接下来的5行(也就是5次迭代)的Error全部小于2.5,对吧?如果是包含当前Inst所在行在内的连续5行,我也会把对应的调整方法写上。
方案一:循环遍历(小数据量友好,直观好懂)
如果你的DataFrame行数不多,用循环遍历的方法最直观,新手也容易调试:
import pandas as pd # 先模拟你的DataFrame(你替换成自己的真实数据就行) df = pd.DataFrame({ 'Inst': [204270, 204273, 204276, 204279, 204282, 204285, 204288, 204291, 204294, 204297, 204300, 204302, 204305, 204308, 204311], 'Error': [3.0, 2.6, 2.4, 2.3, 2.2, 2.1, 2.0, 3.1, 2.7, 2.6, 2.5, 2.4, 2.3, 2.2, 2.1] }) target_insts = [] for idx, row in df.iterrows(): # 先判断当前行后面有没有足够的5行,避免索引越界 if idx + 5 > len(df) - 1: continue # 取出当前行之后的5行的Error值 next_5_errors = df.loc[idx+1:idx+5, 'Error'] # 检查是否所有Error都小于2.5 if all(next_5_errors < 2.5): target_insts.append(row['Inst']) print("符合条件的Inst值:", target_insts)
如果你的需求是包含当前行在内的连续5行Error都小于2.5,只需要把代码里的idx+1:idx+5改成idx:idx+4,同时把判断条件改成idx +4 > len(df)-1就行。
方案二:向量化操作(大数据量高效)
如果你的DataFrame行数很多,循环会变慢,这时候用pandas的向量化操作更高效,不用逐行遍历:
import pandas as pd # 还是先模拟你的数据 df = pd.DataFrame({ 'Inst': [204270, 204273, 204276, 204279, 204282, 204285, 204288, 204291, 204294, 204297, 204300, 204302, 204305, 204308, 204311], 'Error': [3.0, 2.6, 2.4, 2.3, 2.2, 2.1, 2.0, 3.1, 2.7, 2.6, 2.5, 2.4, 2.3, 2.2, 2.1] }) # 生成后续1到5行的Error列,用shift(-i)获取第i行之后的Error for i in range(1, 6): df[f'error_next_{i}'] = df['Error'].shift(-i) # 检查这5列是否全部<2.5,同时确保没有NaN(也就是有足够的后续行) df['all_next_5_ok'] = (df[[f'error_next_{i}' for i in range(1,6)]] < 2.5).all(axis=1) & ~df[[f'error_next_{i}' for i in range(1,6)]].isna().any(axis=1) # 提取符合条件的Inst值 target_insts = df.loc[df['all_next_5_ok'], 'Inst'].tolist() # 可以删掉临时生成的列,保持DataFrame整洁 df.drop(columns=[f'error_next_{i}' for i in range(1,6)], inplace=True) print("符合条件的Inst值:", target_insts)
为啥你之前的方法没成功?
大概率是踩了这两个坑:
- 用了pandas默认的
rolling窗口,但默认的rolling是向前取窗口(包含当前行和之前的行),而你需要的是向后取窗口(当前行之后的行),方向搞反了就出不来正确结果; - 没处理边界情况:最后4行(假设窗口是5)根本没有足够的后续行,直接判断会出现NaN或者索引越界,导致结果出错。
内容来源于stack exchange
相关产品推荐
相关产品推荐

