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

使用Pandas iterrows跨DataFrame匹配值的错误排查求助

问题原因与解决方案:Pandas iterrows匹配值错误

问题原因

当你使用row['ID'] in df2['ID']时,in操作符作用于Pandas Series对象时,实际检查的是该值是否存在于Series的索引中,而非Series的值中。

你的df2['ID']索引为[0,1,2,3,4]:

  • 当row['ID']是4时,4属于索引值,因此返回True(错误判定为匹配)
  • 当row['ID']是5时,5不在索引范围内,因此返回False(错误判定为不匹配)
    这就是结果不符合预期的核心原因。

解决方案

方法1:将目标列转为集合(修正循环逻辑)

把df2['ID']转为Python集合,集合的in操作会直接检查值是否存在,且查询效率更高:

id_set = set(df2['ID'])
for i, row in df1.iterrows():
    print(row['ID'])
    if row['ID'] in id_set:
        print("Match")
    else:
        print("No Match")
    print()

正确输出:

1
Match

2
Match

3
Match

4
No Match

5
Match

方法2:使用Pandas向量化操作(推荐)

Pandas内置的isin()方法是专门用于检查值是否存在于另一个序列的向量化工具,效率远高于逐行循环:

df1['Is_Match'] = df1['ID'].isin(df2['ID'])
print(df1)

输出:

ID  Value  Is_Match
0   1     11      True
1   2     21      True
2   3     23      True
3   4     44     False
4   5      1      True

方法3:合并DataFrame(获取匹配详情)

如果需要同时关联df2中的Status信息,直接使用merge操作一次性完成匹配与信息整合:

merged_df = df1.merge(df2, on='ID', how='left')
merged_df['Status'] = merged_df['Status'].fillna('No Match')
print(merged_df)

输出:

ID  Value  Status
0   1     11  No Match
1   2     21        y
2   3     23        n
3   4     44  No Match
4   5      1        y

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 01:27:32