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

如何加速Pandas中用于Ensemble ID转MGI ID的嵌套for循环?

优化思路

原代码运行速度极慢的核心原因是:每次内层循环都对整个DataFrame执行全表布尔匹配,单条ID查找的时间复杂度为O(n),总时间复杂度随数据规模上升呈指数级增长。

最优优化方案

将ID映射关系提前转为Python字典,利用字典O(1)的查找特性大幅降低查找开销,再通过列表推导完成嵌套列表的转换,整体效率可提升数十到数千倍。

实现代码

# 第一步:将DataFrame转为 ENS_ID -> MGI_ID 的映射字典
# 若你的Ensemble ID列实际名为ENSEMBL_ID,替换set_index的入参即可
id_map = mapping.set_index('ENS_ID')['MGI_ID'].to_dict()

# 第二步:转换嵌套列表,比双层for循环+append写法效率更高
mgi_lists = [[id_map[ens_id] for ens_id in sub_list] for sub_list in list1]

可选兼容处理(适配未匹配ID场景)

如果存在部分ENS_ID没有对应MGI_ID的情况,可改用get方法避免抛出KeyError,自定义缺失值的返回内容:

# 未匹配到的ID统一填充为None,也可替换为你需要的默认值比如'无对应ID'
mgi_lists = [[id_map.get(ens_id, None) for ens_id in sub_list] for sub_list in list1]
效率对比

假设list1总共有10万个ENS_ID,mapping有5万条映射关系:

  • 原代码耗时约几分钟到几十分钟不等,随数据规模增长快速上升
  • 字典+列表推导的方案耗时仅需几十毫秒到几百毫秒

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:06:05