如何在列结构相同的另一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
相关产品推荐
相关产品推荐

