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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:06:25