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

如何在列结构相同的另一dataframe中查找指定dataframe行的对应索引

原实现存在的问题

  • 循环变量i冲突:遍历df2时的循环变量i会覆盖你要查询的df1行号i,逻辑本身就存在错误
  • iterrows遍历效率极低,当df2行数超过万级时性能会非常差

更优实现方案

单条查询(仅查df1的第i行对应的df2索引)

直接用pandas向量化比较,一行代码即可完成,全程无循环,性能远高于手写遍历:

# 返回所有匹配的df2索引,无匹配则返回空索引对象
match_index = df2[df2.eq(df1.iloc[i]).all(axis=1)].index
print(match_index)

说明:eq方法会逐元素对比df2和df1第i行的取值,all(axis=1)会过滤出所有列都完全相等的行,最后直接取索引即可。

批量查询(查df1所有行各自对应的df2索引)

如果需要一次性匹配df1的全部行,用merge关联的方式效率最高:

# 先给df2加一列存它的原始索引
df2_with_origin_idx = df2.reset_index(names='df2_origin_index')
# 按所有列进行左关联,直接得到匹配结果
match_result = df1.merge(df2_with_origin_idx, on=list(df1.columns), how='left')
# match_result的df2_origin_index列就是每行对应的df2索引,无匹配则为NaN

特殊场景适配

如果你的数据包含浮点数,直接等值比较可能会出现精度误差导致匹配失败,可以用容差比较替换等值判断:

# 1e-6是可接受的误差范围,可按需调整
match_index = df2[df2.sub(df1.iloc[i]).abs().lt(1e-6).all(axis=1)].index

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:45:03