簡體   English   中英

如何在集合列上合並兩個熊貓數據框

[英]How to merge two pandas dataframes on column of sets

我在兩個數據框中都有表示生物系統中相互作用伙伴的列,因此,如果gene_A與gene_B相互作用,則“ gene_pair”列中的條目將為{gene_A,gene_B}。 我想做一個內部聯接,但是嘗試:

pd.merge(df1, df2, how='inner', on=['gene_pair'])

引發錯誤

TypeError: type object argument after * must be a sequence, not itertools.imap

我需要在無序對上進行合並,據我所知,我無法在兩個具有基因名稱的單獨列的組合上進行合並。 還有另一種方法可以實現這種合並嗎?

一些示例dfs:

gene_pairs1 = [
    set(['gene_A','gene_B']),
    set(['gene_A','gene_C']),
    set(['gene_D','gene_A'])
]
df1 = pd.DataFrame({'r_name': ['r1','r2','r3'], 'gene_pair': gene_pairs1})

gene_pairs2 = [
    set(['gene_A','gene_B']),
    set(['gene_F','gene_A']),
    set(['gene_C','gene_A'])
]
df2 = pd.DataFrame({'function': ['f1','f2','f3'], 'gene_pair': gene_pairs2})

pd.merge(df1,df2,how='inner',on=['gene_pair'])

我想輸入“ r1”與“ f1”對齊,而“ r2”與“ f3”對齊。

最后非常簡單:我使用了Frozenset,而不是set。

我建議您為每個配對增加一個額外的ID列,然后加入該行! 例如

df2['gp'] = df2.gene_pair.apply(lambda x: list(x)[0][-1]+list(x)[1][-1])
df1['gp'] = df1.gene_pair.apply(lambda x: list(x)[0][-1]+list(x)[1][-1])
pd.merge(df1, df2[['function','gp']],how='inner',on=['gp']).drop('gp', axis=1)

在此處輸入圖片說明

暫無
暫無

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

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