如何加速这个Pandas for循环



我有以下Python数据:

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

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

<表类>ENS_IDMGI_IDtbody><<tr>ENS_ID1MGI_ID1ENS_ID2MGI_ID2

最好的解决方案是创建一个只包含查找值的快速数据结构,我的意思是键/值,字典可以非常快。之后,您必须遍历输入并创建查找版本。

import pandas as pd
list1=[['ENS_ID1','ENS_ID2','ENS_ID3'], ['ENS_ID10','ENS_ID3','ENS_ID2'] ] 
mapping = pd.DataFrame({'ENS_ID':['ENS_ID1','ENS_ID2','ENS_ID3','ENS_ID10'], 'MGI_ID':['MGI_ID1','MGI_ID2','MGI_ID2','MGI_ID10']})

lookup = dict(mapping[['ENS_ID','MGI_ID']].values)
# This is superfast
mapped_list = []
for l in list1:
mapped_list.append([lookup[v] for v in l])
print(mapped_list)
# [['MGI_ID1', 'MGI_ID2', 'MGI_ID2'], ['MGI_ID10', 'MGI_ID2', 'MGI_ID2']]

ps: please correct the question with working code.

作为一个快速的解决方案,您可以尝试使用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更快的一些解释在这里

相关内容

  • 没有找到相关文章

最新更新