Сопоставить объект в списке кортежей с объектом в кадре данных, создать новый столбец, если совпадение существует - PullRequest
0 голосов
/ 21 сентября 2018

Рассмотрим следующий список кортежей:

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

Любые предложения будут великолепны.

1 Ответ

0 голосов
/ 21 сентября 2018

Создать маску Boolean: мы используем 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...