Как определить дубликат и назначить новый идентификатор? - PullRequest
1 голос
/ 17 января 2020

У меня есть список олиго ДНК для заказа, которые имеют много повторяющихся последовательностей. Тем не менее, мне нужно, чтобы они были в паре с Идентификатором, для которого плазмида использовать их.

Другими словами, мне нужен этот фрейм данных:

  Oligo_sequence   Plasmid
0 "ATG"           "Plasmid A"
1 "ATG"           "Plasmid B" 
2 "CAG"           "Plasmid C" 

Чтобы стать:

  Oligo_sequence    Plasmid
0 "ATG"           ["Plasmid A","Plasmid B"]
1 "CAG"           ["Plasmid C"] 

Я думал, что подобная функция, вероятно, будет работать. Но я не знаю, как определить дубликаты.

for index, row in df.iterrows():
    plasmidlist = [row[1]]
    if duplicate == True: #Is their a dublicate function I can use? 
        plasmidlist.append(duplicaterow[1])
        drop(dublicaterow)

    df.at[row,'Plasmid']= plasmidlist

Ответы [ 4 ]

3 голосов
/ 17 января 2020

Используйте groupby и agg со списком:

df.groupby('Oligo_sequence')['Plasmid'].agg(list)

Вывод:

"ATG"    ["Plasmid A", "Plasmid B"]
"CAG"                 ["Plasmid C"]
Name: Plasmid, dtype: object
1 голос
/ 17 января 2020

Вы можете использовать pd.groupby с .apply(list):

df = pd.DataFrame({'Oligo_sequence':['ATG', 'ATG', 'CAG'], 'Plasmid':['Plasmid A', 'Plasmid B', 'Plasmid C']})

print(df.groupby('Oligo_sequence')['Plasmid'].apply(list).reset_index())

Отпечатки:

  Oligo_sequence                 Plasmid
0            ATG  [Plasmid A, Plasmid B]
1            CAG             [Plasmid C]
0 голосов
/ 17 января 2020

Вы можете использовать строковые функции в Pandas, если вы не очень заинтересованы в списках: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.cat.html

Oligo_sequence=['ATG','ATG','CAG']
Plasmid = ['Plasmid A','Plasmid B', 'Plasmid C']
data = {'Oligo_sequence':Oligo_sequence,
        'Plasmid':Plasmid}

df = pd.DataFrame(data)

df


    Oligo_sequence  Plasmid
0       ATG        Plasmid A
1       ATG        Plasmid B
2       CAG        Plasmid C

(df
 .groupby('Oligo_sequence')
 .agg(lambda x: x['Plasmid'].str.cat(sep= ','))
 .reset_index()
)

    Oligo_sequence  Plasmid
 0      ATG        Plasmid A,Plasmid B
 1      CAG        Plasmid C
0 голосов
/ 17 января 2020

Если ваш алгоритм синтаксического анализа работает, я бы использовал словарную структуру для выполнения sh этой задачи. Вы можете легко проверить наличие элемента в списке в Python:

     for each item in parent_list:
       if item is in plasmid_list:
          # do thing
...