Pandas遍历DataFrame时每次循环获取最近三条记录的方法
实现方案
取数逻辑可以通过统一的切片规则实现,不需要额外写分支判断:遍历到第i行(位置索引从0开始计数)时,取数的起始位置为max(0, i-2),结束位置为i+1,即可完全匹配需求。
示例代码
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'User': ['Delhi_Goa']*6, 'Warehouse': ['Goa Warehouse']*6, 'R_Number': [5046, 5046, 5048, 5048, 5048, 5048], 'Date': ['2022-05-24']*6, 'Missing': [ 'TRRFF.1T22AD0041', 'PPRFP.1T22AD0017', 'TRRFF.1T22AD0031', 'TRRFF.1T22AD0037', 'PPRFP.1T22AD0039', 'TRRFF.1T22AD0026' ] }) # 按规则逐行遍历 for i in range(len(df)): # 计算切片起始位置,自动规避负索引 start_pos = max(0, i - 2) # 取出当前批次需要处理的记录 current_records = df.iloc[start_pos:i+1] # 替换为你的实际业务处理逻辑 print(f"第{i+1}次循环,取到的行索引:{list(current_records.index)}")
运行验证
上述代码执行后输出如下,和要求的取数规则完全一致:
第1次循环,取到的行索引:[0] 第2次循环,取到的行索引:[0, 1] 第3次循环,取到的行索引:[0, 1, 2] 第4次循环,取到的行索引:[1, 2, 3] 第5次循环,取到的行索引:[2, 3, 4] 第6次循环,取到的行索引:[3, 4, 5]
补充说明
- 采用
iloc做位置切片,不依赖DataFrame的原始索引值,哪怕索引乱序、非连续也能正常运行 - 如果后续需要调整为取最近N条记录,只需要把代码里的
2替换为N-1即可,比如取最近5条就改为max(0, i-4) - 该逻辑对长度小于3的DataFrame也能自动适配,不会出现索引越界问题
内容的提问来源于stack exchange,提问作者Rahul Sharma
相关产品推荐
相关产品推荐

