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

如何从指定行开始遍历Pandas DataFrame?

解决DataFrame遍历中从指定行开始查找的问题

核心思路

你需要避免在遍历中修改原DataFrame(删除行),同时利用行位置索引,在找到X后直接从当前行的后续部分开始查找Y,避免重复遍历已检查过的行。

优化后的代码方案

方案1:利用enumerate跟踪行位置

import pandas as pd

# 存储X和Y对应信息的结果列表
results = []

# 用enumerate获取行的序号(row_count)和行数据
for row_count, (index, row) in enumerate(new_df.iterrows()):
    if X in row[2]:
        # 提取X行的所需信息
        x_info = {
            "x_index": index,
            "x_content": row[2],
            # 按需添加其他需要提取的字段
        }
        
        # 内层循环只遍历X所在行之后的部分
        for visit_count, (visit_index, visit_row) in enumerate(new_df.iterrows()):
            # 跳过X行及之前的所有行
            if visit_count <= row_count:
                continue
            if Y in visit_row[2]:
                # 提取Y行的所需信息
                y_info = {
                    "y_index": visit_index,
                    "y_content": visit_row[2],
                    # 按需添加其他需要提取的字段
                }
                
                # 合并信息并加入结果列表
                results.append({**x_info, **y_info})
                # 找到第一个匹配的Y就终止内层循环,继续找下一个X
                break

# 将结果转换为DataFrame
result_df = pd.DataFrame(results)

方案2:用iloc切片直接获取后续行(更高效)

这个方法不需要判断行位置,直接通过切片获取X之后的子DataFrame,减少不必要的遍历:

import pandas as pd

results = []

for row_count, (index, row) in enumerate(new_df.iterrows()):
    if X in row[2]:
        x_info = {
            "x_index": index,
            "x_content": row[2],
            # 按需添加其他字段
        }
        
        # 直接从X行的下一行开始遍历子DataFrame
        for visit_index, visit_row in new_df.iloc[row_count + 1:].iterrows():
            if Y in visit_row[2]:
                y_info = {
                    "y_index": visit_index,
                    "y_content": visit_row[2],
                    # 按需添加其他字段
                }
                results.append({**x_info, **y_info})
                break

result_df = pd.DataFrame(results)

原代码的问题说明

  1. 不必要的行删除:你之前的new_df.drop(index, inplace=True)会修改原DataFrame,导致后续查找下一组X和Y时丢失之前的行数据,完全没必要这么做。
  2. 重复遍历:内层循环从头遍历整个DataFrame,会重复检查已经过的行,浪费资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:15:34