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

如何遍历DataFrame行并在满足条件时追加至另一DataFrame?

解决Pandas中筛选行并追加到另一个DataFrame的问题

你的代码没法正常运行主要有两个原因:一是Pandas的append()方法不会原地修改原DataFrame,它会返回一个新的DataFrame对象;二是用iterrows()逐行遍历的效率其实很低,尤其当数据量较大的时候。

下面给你两种可行的解决方案,优先推荐第一种更高效的向量化操作:

方法一:用布尔索引筛选+pd.concat(推荐)

这是Pandas官方推荐的做法,利用向量化操作替代循环,代码简洁且性能更好:

import pandas as pd

# 第一步:筛选df_a中满足条件的所有行
filtered_df = df_a[df_a["some_col_val"] == 1]

# 第二步:将筛选结果合并到df_b,注意要重新赋值给df_b
df_b = pd.concat([df_b, filtered_df], ignore_index=True)
  • ignore_index=True的作用是重置合并后DataFrame的索引,避免出现重复索引的问题。
  • 如果你的Pandas版本在2.0及以上,append()方法已经被弃用,pd.concat是官方替代方案。

方法二:修正你的循环遍历代码(不推荐大数据量)

如果你一定要用循环的方式实现,需要把每次筛选到的行先收集起来,最后一次性合并,而不是每次循环都调用append(频繁创建新DataFrame会严重拖慢速度):

rows_to_add = []
for index, row in df_a.iterrows():
    if row["some_col_val"] == 1:
        rows_to_add.append(row)

# 将收集到的行转成DataFrame后合并到df_b
df_b = pd.concat([df_b, pd.DataFrame(rows_to_add)], ignore_index=True)

如果你坚持要在循环里逐行追加,必须把append的结果重新赋值给df_b,但这种方式效率极低,不建议使用:

for index, row in df_a.iterrows():
    if row["some_col_val"] == 1:
        df_b = df_b.append(row, ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:34:43