簡體   English   中英

將元組列表中的對象與數據幀中的對象進行匹配,如果存在匹配項,則創建新列

[英]Match object in list of tuples to object in dataframe, create new column if match exists

考慮以下元組列表:

some_strings = [('Name1', 'ABCD', 'DEFG', 'Score=12'),
                ('Name2', 'JKLL', 'RMPQ', 'Score=11')]

以及以下熊貓數據框:

Sequence ID    Left Sequence    Right Sequence
Name1              ABCD             RQLM
Name1              ABCR             PLMT
Name2              JKLL             ZFGQ
Name2              RPLP             FTRD

我試圖將元組中的第二個對象與df ['Left Sequence']列進行比較,以檢查是否完全匹配(不考慮部分匹配),如果匹配發生,則在末尾的新列中打印二聚體df。 如果沒有發生匹配,我將打印NA。 這是我嘗試過的代碼:

for x in some_strings:
    for y in x:
        df['Dimers'] = df['Left Sequence'].apply(lambda s: 'Dimer' if s == y[1] else 'NA')

我的預期輸出:

Sequence ID    Left Sequence    Right Sequence    Dimers
Name1              ABCD             RQLM          Dimer
Name1              ABCR             PLMT           NA
Name2              JKLL             ZFGQ          Dimer
Name2              RPLP             FTRD           NA

我的實際輸出(您可能會猜到):

Sequence ID    Left Sequence    Right Sequence    Dimers
Name1              ABCD             RQLM           NA
Name1              ABCR             PLMT           NA
Name2              JKLL             ZFGQ           NA
Name2              RPLP             FTRD           NA

任何建議都很好。

創建布爾型的掩碼:我們使用isin創建掩碼

mask=df.iloc[:,:-1].apply(tuple,1).isin([x[:-2] for x in some_strings])    
df['Dimer']='NA'
df.loc[mask,'Dimer']='Dimer'        
df
Out[1120]: 
  SequenceID LeftSequence RightSequence  Dimer
0      Name1         ABCD          RQLM  Dimer
1      Name1         ABCR          PLMT     NA
2      Name2         JKLL          ZFGQ  Dimer
3      Name2         RPLP          FTRD     NA

暫無
暫無

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

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