我在 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 |
我正在嘗試獲取另一個串列串列,其中我有 MGI_ID 而不是 ENS_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)
uj5u.com熱心網友回復:
作為一種快速解決方案,您可以嘗試使用 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 更快的一些解釋在這里
uj5u.com熱心網友回復:
最好的解決方案是創建一個只有查找值的快速資料結構,我的意思是一個鍵/值,一個字典可以非常快。之后,您必須處理輸入并創建查找版本。
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:請用作業代碼更正問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/333535.html
