【问题标题】:How do I Identify duplicate and assign new ID?如何识别重复并分配新 ID?
【发布时间】:2020-01-17 01:00:17
【问题描述】:

我有一份 DNA 寡核苷酸列表可供订购,其中包含重复序列。但是,我需要将它们与使用它们的质粒的标识符配对。

换句话说,我需要这个数据框:

  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

【问题讨论】:

  • 最好避免使用.iterrows()。顺便说一句,你为什么要这样做?
  • 尝试更多使用groupbyapply等函数,而不是iterrow:第一种方法:df.groupby('Oligo_sequence')['Plasmid'].apply(list).reset_index();使用 lambda 的第二种方法:df.groupby('Oligo_sequence')['Plasmid'].apply(lambda x: ",".join(x).split(",")).reset_index()

标签: python pandas biopython


【解决方案1】:

groupbyagg 与列表一起使用:

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

输出:

"ATG"    ["Plasmid A", "Plasmid B"]
"CAG"                 ["Plasmid C"]
Name: Plasmid, dtype: object

【讨论】:

    【解决方案2】:

    您可以将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]
    

    【讨论】:

    • 谢谢,干得漂亮
    【解决方案3】:

    如果您的解析算法有效,我将使用字典结构来完成此任务。您可以在 Python 中轻松检查一个项目是否存在于列表中:

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

    【讨论】:

      【解决方案4】:

      如果您不喜欢列表,可以在 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
      

      【讨论】:

        猜你喜欢
        • 2018-10-04
        • 2020-09-19
        • 1970-01-01
        • 2017-11-24
        • 2020-10-24
        • 2019-01-03
        • 2023-01-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多