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

Python Pandas:使用isin时保留重复匹配的对应索引

高效实现匹配重复元素的索引映射方法

问题描述

给定包含唯一Col1值的DataFrame,以及一个包含重复元素的Python列表,需要根据列表中与Col1匹配的值生成对应索引列表,并保留列表中的重复次数。使用df.loc[df['Col1'].isin(list),:].index只能得到唯一索引,循环处理效率过低,需寻找高效实现方式。

解决方案

核心思路是先构建Col1值到DataFrame索引的映射关系,再利用该映射对目标列表进行批量转换,自然保留重复次数。以下是两种高效实现方式:

方法1:使用字典映射

import pandas as pd

# 构建示例DataFrame
data = {
    'Col1': [1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064,
             1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074],
    'Col2': [2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094,
             2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104]
}
df = pd.DataFrame(data, index=[f'Index{i}' for i in range(1, 21)])

# 目标列表
target_list = [1055, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063,
               1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073,
               1074, 1074]

# 构建Col1到索引的字典映射
col1_index_map = df.reset_index().set_index('Col1')['index'].to_dict()

# 批量转换得到结果
output = [col1_index_map[val] for val in target_list]

方法2:使用Pandas Series映射(更高效)

# 构建Col1到索引的Series映射
col1_index_series = df.reset_index().set_index('Col1')['index']

# 利用Series的loc方法批量匹配,自动保留重复次数
output = col1_index_series.loc[target_list].tolist()

说明

  • 两种方法均基于**Col1值唯一**的前提(若Col1存在重复值,需根据需求调整映射逻辑,比如取第一个匹配索引或所有匹配索引)。
  • 方法2使用Pandas的向量化操作,相比列表推导式在处理超大列表时性能更优。
  • 最终输出output将完全匹配目标列表的元素顺序和重复次数,得到期望的索引列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 02:57:38