[英]Iterate through rows in pandas dataframe and match tuples from a list and create a new df column
[英]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.