簡體   English   中英

Pandas:如何檢查數據框列中的任何列表是否存在於另一個數據幀的范圍內?

[英]Pandas: How to check if any of a list in a dataframe column is present in a range in another dataframe?

我正在嘗試比較兩個生物信息學DataFrames(一個具有轉錄起始和最終基因組位置,一個具有表達數據)。 我需要檢查一個DataFrame中的任何位置列表是否存在於另一個DataFrame中的起始位置和結束位置定義的范圍內,返回它們匹配的行/ ID。

我已經嘗試了許多內置方法(.isin,.where,.query,),但通常會因為列表不可用而卡住。 我還嘗試了一個帶有iterrows和itertuples的嵌套for循環,這非常慢(我的實際數據集是數千個條目)。

tss_df = pd.DataFrame(data={'id':['gene1','gene2'], 
   'locs':[[21,23],[34,39]]})
exp_df = pd.DataFrame(data={'gene':['geneA','geneB'], 
   'start': [15,31], 'end': [25,42]})

我想找到tss_df中id為'gene1'的行的位置(locs)與exp_df中的'geneA'匹配。

輸出將是這樣的:

output = pd.DataFrame(data={'id':['gene1','gene2'],
   'locs': [[21,23],[34,39]],
   'match': ['geneA','geneB']})

編輯:根據下面的評論,我嘗試使用merge_asof

pd.merge_asof(tss_df,exp_df,left_on='locs',right_on='start')

這給了我一個不兼容的合並鍵錯誤,我懷疑是因為我將列表與整數進行比較; 所以我拆分了locs中的第一個值:

tss_df['loc1'] = tss_df['locs'][0]
pd.merge_asof(tss_df,exp_df,left_on='loc1',right_on='start')

這似乎適用於我的測試數據,但我需要嘗試使用我的實際數據!

根據下面的評論,我嘗試使用merge_asof

pd.merge_asof(tss_df,exp_df,left_on='locs',right_on='start')

這給了我一個不兼容的合並鍵錯誤,我懷疑是因為我將列表與整數進行比較; 所以我拆分了locs中的第一個值:

tss_df['loc1'] = tss_df['locs'][0]
pd.merge_asof(tss_df,exp_df,left_on='loc1',right_on='start')

這似乎適用於我的測試數據!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM