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

如何将DataFrame列值与字典列表值进行存在性匹配?

解决方案:判断DataFrame列值是否存在于映射字典的列表中

这里有个高效简洁的方案来实现你想要的功能,核心思路是先把映射字典里的所有目标值整合到一个集合(查找效率更高),再用pandas内置方法批量判断:

完整代码示例

import pandas as pd
from itertools import chain  # 可选,用来简化代码

# 你的原始数据
d = {'col1':['2q','48', '48-49']}
test = pd.DataFrame(d)

# 映射字典
mupcs_to_pc_mapping = {
    '24': ['48-49', '48', '49'], #M2
    '23': ['50-51', '50', '51'], #M3
    '22': ['52-53', '52', '53'], #M4
    '21': ['54-55', '54', '55'], #M5
}

# 方法1:用itertools.chain合并所有子列表元素为集合(简洁写法)
all_target_values = set(chain.from_iterable(mupcs_to_pc_mapping.values()))

# 方法2:手动循环合并(适合不想导入额外库的场景)
# all_target_values = set()
# for value_list in mupcs_to_pc_mapping.values():
#     all_target_values.update(value_list)

# 批量判断每个col1的值是否在目标集合中
test['exists_in_mapping'] = test['col1'].isin(all_target_values)

# 输出你需要的结果列
print(test['exists_in_mapping'])

运行结果

0    False
1     True
2     True
Name: exists_in_mapping, dtype: bool

关键细节说明

  1. 集合的优势:把所有目标值存入集合,是因为集合的成员检测操作x in s时间复杂度为O(1),远快于列表的O(n),当映射字典规模较大时,效率提升会非常明显。
  2. isin()方法:pandas的Series.isin()是专门用于批量判断元素是否在目标序列/集合中的内置方法,比手动循环遍历每个元素简洁且高效。

如果你之前尝试相关方法没成功,大概率是因为没有正确提取映射字典里所有子列表的元素,而是仅针对单一列表做判断,导致检测范围不对。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:18:47