考虑以下元组列表:
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
任何建议都会很棒。
答案 0 :(得分:1)
创建布尔型的掩码:我们使用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