首页 > 解决方案 > 如何加速这个 Pandas for 循环

问题描述

我在 Python 中有以下数据:

list1=[[ENS_ID1,ENS_ID2,ENS_ID3], [ENS_ID10,ENS_ID24,ENS_ID30] , ....] 

映射(一个数据框,在第一列中我有一个 Ensemble 基因 ID,在第二列中是相应的 MGI 基因 ID)

ENS_ID MGI_ID
ENS_ID1 MGI_ID1
ENS_ID2 MGI_ID2

我正在尝试获取另一个列表列表,而不是 ENS_ID 我有 MGI_ID。为了映射 ID,我使用嵌套在另一个循环中的 for 循环,但显然,作为一种方法,它真的很慢。我怎样才能加快速度?这是代码:

for l in ens_lists:
  mgi = []
  for i in l:
      mgi.append(mapping['MGI_ID'][mapping[mapping['ENSEMBL_ID']==i].index].values[0])
  mgi_lists.append(mgi)

标签: pythonpandasperformancefor-loop

解决方案


作为一种快速解决方案,您可以尝试使用 listcomp 而不是 append,这应该会更快:

mgi_lists = [[mapping['MGI_ID'][mapping[mapping['ENSEMBL_ID']==i].index].values[0] for i in l] for l in ens_lists]

关于为什么 listcomp 更快的一些解释在这里


推荐阅读