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

提取df1中与df2指定列匹配的行索引(基于内连接逻辑)

针对你要提取df1中与df2列'1'、'2'完全匹配的行索引的需求,我整理了几种实用的实现方案,附代码示例供你参考:

方法1:通过Merge保留原始索引

这种方法的核心是先把df1的索引转为一列,再执行内连接,最后提取对应的原始索引。好处是如果你需要同时获取匹配行的其他数据,这个方法能一次性搞定:

import pandas as pd

# 初始化你的两个DataFrame
df1 = pd.DataFrame({'1': [0,1,2,3,4,5], '2': [6,7,8,9,10,11], 'a': [3,6,9,12,15,18]})
df2 = pd.DataFrame({'1': [0,1,2,33,40,5], '2': [6,7,8,99,10,11], 'b': [30,60,90,120,150,180], 'c': [-1,-2,-3,-4,-5,-6]})

# 给df1添加原始索引列
df1_with_idx = df1.reset_index().rename(columns={'index': 'df1_original_index'})

# 基于列'1'和'2'执行内连接
merged_result = pd.merge(df1_with_idx, df2, on=['1', '2'], how='inner')

# 提取匹配的df1行索引
matching_indices = merged_result['df1_original_index'].tolist()

print(matching_indices)  # 输出: [0, 1, 2, 5]

方法2:使用布尔索引直接匹配行对

如果只需要提取索引,不需要merge后的其他数据,这种方法更轻量。我们先把df2中列'1'和'2'的组合转成集合(集合的查询效率很高),再用布尔索引筛选df1中的匹配行:

# 生成df2中(列1,列2)的组合集合
df2_pairs = set(zip(df2['1'], df2['2']))

# 生成df1中每行是否匹配的布尔掩码
match_mask = df1.apply(lambda row: (row['1'], row['2']) in df2_pairs, axis=1)

# 提取匹配的行索引
matching_indices = df1[match_mask].index.tolist()

print(matching_indices)  # 输出: [0, 1, 2, 5]

方法对比

  • 方法1:最灵活,适合需要同时获取匹配行的其他数据场景,代码可读性高。
  • 方法2:性能最优(尤其是大数据集),因为集合的查询是O(1)时间复杂度,仅需遍历df1一次。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:03:45