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

如何高效查找两个DataFrame的交集并获取对应索引?

高效获取两个DataFrame交集的对应索引

核心方案:用merge实现向量化匹配

你的列表推导式效率低是因为做了逐行循环,改用pandas的merge(向量化操作)能大幅提升速度,同时输出格式和你要的一致。

场景1:获取df2匹配行在df1中的对应索引

把df1的索引转为列后合并,就能直接提取匹配的df1索引:

import pandas as pd

# 示例数据初始化
df1 = pd.DataFrame({'a': ['book', 'book', 'pen', 'eraser', 'book'], 'b': [1,2,1,3,4]})
df2 = pd.DataFrame({'a': ['pen', 'book', 'pen', 'eraser', 'book'], 'b': [4,2,8,3,14]})

# 将df1的索引转为列,方便合并后提取
df1_with_idx = df1.reset_index().rename(columns={'index': 'df1_idx'})
# 按a、b列做内连接,只保留两边都存在的行
merged = pd.merge(df2, df1_with_idx, on=['a', 'b'], how='inner')
# 得到df1中匹配行的索引,格式为pandas Index对象
matched_df1_index = merged['df1_idx']

运行结果:Int64Index([1, 3], dtype='int64'),对应df1里book-2和eraser-3的行索引。

场景2:获取df2中与df1有交集的行的索引

如果需要的是df2自身的匹配行索引,合并时保留df2的索引即可:

merged = pd.merge(df2.reset_index(), df1, on=['a', 'b'], how='inner')
matched_df2_index = merged['index']

运行结果:Int64Index([1, 3], dtype='int64'),对应df2里book-2和eraser-3的行索引。

优势说明

  • 速度快:merge是pandas底层优化的操作,避免了Python层面的逐行循环,大数据量下效率提升显著。
  • 格式统一:返回结果是pandas的Index对象,和你第一个示例的输出格式完全一致,无需额外转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:55:00