2017-03-21 12 views
1

私は3人のテーブルとそのDNA配列を持っています。各人の完全なゲノムは、2つの遺伝子(紐):gene1およびgene2(すなわちfull_genome = gene1+gene2)から成り、誤った重複した項目があることがあります。Python Pandas:文字列の最大長の選択

テーブルが現在のように構成されて

:すべてのこれらのうち10に行5にエリックのため

row_num | name | gene_name | dna_sequence 
--------|--------|-----------|-------------- 
1  | sarah | gene 1 | aaaaaaaaaa 
2  | sarah | gene 2 | gggggggggg 
3  | charles| gene 1 | aaaattttt 
4  | charles| gene 2 | ggggggtttt 
5  | eric | gene 1 | aaa 
6  | eric | gene 2 | cccccccccc 
7  | eric | gene 1 | aaaaa 
8  | eric | gene 2 | cccc 
9  | eric | gene 1 | a 
10  | eric | gene 2 | c 

注重複したエントリを、私はちょうど最長の全配列を選択します(すなわちargmax(len(gene1)+len(gene2)))、行遺伝子は常にペアで来ること

name | gene1  | gene2 
-------|------------|----------- 
sarah | aaaaaaaaaa | gggggggggg 
charles| aaaattttt | ggggggtttt 
eric | aaaaaaaaaa | cccccccccc 

注:5と6私はまた、最終的に終わるためにテーブルを回転したい各データソースは、1つのファイルとして自分のデータを送信し、テーブルを形成しましたファイルごとに読み込みます。以下のようにエリックの場合には、総遺伝子の長さは、次のとおり

  • 行5 & 6:3 + 10 = 13
  • 行7 & 8:5 + 4 = 9
  • 行9 & 10: 1 + 1 = 2

最長の総遺伝子長に基づいて、私は5行目と6行目を保持し、残りは破棄します。

私はpivot()、transpose()などを試しましたが、むしろ鶏肉の卵になりました。重複したエントリのためにテーブルを希望するフォームにピボットすることはできませんが、重複したエントリがどこから来たのかを知ることは容易ではないため、合計の長さを測定することはできません。

私は現在、私は重複を区別することができるように、duplicate_index列を追加しようとしている:これらのエントリは、常にペアで

row_num | name | gene_name | dna_sequence | dupe_index 
--------|--------|-----------|--------------|------------ 
1  | sarah | gene 1 | aaaaaaaaaa | 0 
2  | sarah | gene 2 | gggggggggg | 0 
3  | charles| gene 1 | aaaattttt | 0 
4  | charles| gene 2 | ggggggtttt | 0 
5  | eric | gene 1 | aaa   | 0 
6  | eric | gene 2 | cccccccccc | 0 
7  | eric | gene 1 | aaaaa  | 1 
8  | eric | gene 2 | cccc   | 1 
9  | eric | gene 1 | a   | 2 
10  | eric | gene 2 | c   | 2 
+0

に来るのですか? 「a」、「cccc」、「aa」、「cc」、「a」、「cccc」のペアが必要ですか? – DSM

+0

うん、それはまさに正しい。これを反映するために質問を編集しました。 – AndreyIto

答えて

1

試み1

df.loc[ 
    df.dna_sequence.str.len().groupby([df.name, df.gene_name]).idxmax() 
].set_index(['name', 'gene_name']).dna_sequence.unstack() 

gene_name  gene 1  gene 2 
name        
charles  aaaattttt ggggggtttt 
eric   aaaaa cccccccccc 
sarah  aaaaaaaaaa gggggggggg 
+0

これは実際にはうまくいきました: df.loc [df.dna_sequence.str.len()。groupby([df.name、df.gene_name])。idxmax()]。set_index(['name'、 'gene_name '])) – AndreyIto

関連する問題