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

如何用df.iterrows()替代传统for循环处理DataFrame?

用df.iterrows()替代传统循环获取各TO_ID最小DURATION_H记录

你的原代码遍历1到len(df_A2C)的整数,但实际TO_ID并非连续值(比如示例数据里的TO_ID是7、26这类离散值),导致多数迭代会生成空DataFrame,需要额外判断。下面是用iterrows()实现需求的方法,自动避免空DataFrame问题:

方法1:用iterrows()收集行数据后筛选

# 创建字典存储每个TO_ID对应的所有行
to_id_rows = {}

# 逐行遍历DataFrame
for idx, row in df_A2C.iterrows():
    to_id = row['TO_ID']
    if to_id not in to_id_rows:
        to_id_rows[to_id] = []
    to_id_rows[to_id].append(row)

# 对每个TO_ID筛选DURATION_H最小的行
for to_id, rows in to_id_rows.items():
    min_duration_row = min(rows, key=lambda x: x['DURATION_H'])
    print(min_duration_row)

这个方式通过iterrows()遍历所有有效行,只收集存在的TO_ID数据,自然不会出现空DataFrame的情况。

更高效的替代方案(适合大型DataFrame)

如果你的核心需求是获取每个TO_ID对应DURATION_H最小的记录,不建议用iterrows()——因为它在处理大型DataFrame时效率较低。更优的方式是用pandas内置的groupby+idxmin:

# 按TO_ID分组,提取每组DURATION_H最小的行
result_df = df_A2C.loc[df_A2C.groupby('TO_ID')['DURATION_H'].idxmin()]
print(result_df)

这个方法完全避免循环,利用pandas的向量化操作,速度远快于迭代遍历,代码也更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:10:26