2016-07-18 5 views
0

で同じ情報を持つ行を保管してください:Pythonのパンダのデータフレームは、このようになりますPythonのデータフレームを使用している場合は3列

ID_1 ID_2 haplotypeID locus 
    A1 A1 hap.1.1 KIRa 
    A1 A1 hap.1.2 KIRa 
    A2 A2 hap.2.1 KIRa 
    A2 A2 hap.2.2 KIRa 
    A3 A3 hap.1.1 KIRa 
    A4 A4 hap.2.2 KIRa 
    A4 A4 hap.1.2 KIRa 
    A1 A1 hap.1.1 KIRb 
    A2 A2 hap.2.1 KIRb 
    A2 A2 hap.2.2 KIRb 
    A3 A3 hap.1.1 KIRb 
    A3 A3 hap.1.2 KIRb 
    A4 A4 hap.2.2 KIRb 
    A4 A4 hap.1.2 KIRb 
    A1 A1 hap.1.1 KIRc 
    A2 A2 hap.2.1 KIRc 
    A3 A3 hap.1.1 KIRc 
    A3 A3 hap.1.2 KIRc 
    A4 A4 hap.1.2 KIRc 

という名前の4つの列があります:ID_1、ID_2、ハプロタイプIDと軌跡。 ID_1、ID_2、およびlocusの3つの列に対して重複する行のペアのみを保持したいと考えています。上記の例では、出力は次のようになります。

ID_1 ID_2 haplotypeID locus 
    A1 A1 hap.1.1 KIRa 
    A1 A1 hap.1.2 KIRa 
    A2 A2 hap.2.1 KIRa 
    A2 A2 hap.2.2 KIRa 
    A4 A4 hap.2.2 KIRa 
    A4 A4 hap.1.2 KIRa 
    A2 A2 hap.2.1 KIRb 
    A2 A2 hap.2.2 KIRb 
    A3 A3 hap.1.1 KIRb 
    A3 A3 hap.1.2 KIRb 
    A4 A4 hap.2.2 KIRb 
    A4 A4 hap.1.2 KIRb 
    A3 A3 hap.1.1 KIRc 
    A3 A3 hap.1.2 KIRc 

誰かが私を助けてくれることを願っています。前もって感謝します!

+0

これは、複製したままにしたいときに削除する方法を示しています。私が探していたツールは "keep = False"です。 – Svalf

答えて

0

これを試してみてください:

df[df[['ID_1', 'ID_2', 'locus']].duplicated(keep=False)] 
Out[449]: 
    ID_1 ID_2 haplotypeID locus 
0 A1 A1  hap.1.1 KIRa 
1 A1 A1  hap.1.2 KIRa 
2 A2 A2  hap.2.1 KIRa 
3 A2 A2  hap.2.2 KIRa 
5 A4 A4  hap.2.2 KIRa 
6 A4 A4  hap.1.2 KIRa 
8 A2 A2  hap.2.1 KIRb 
9 A2 A2  hap.2.2 KIRb 
10 A3 A3  hap.1.1 KIRb 
11 A3 A3  hap.1.2 KIRb 
12 A4 A4  hap.2.2 KIRb 
13 A4 A4  hap.1.2 KIRb 
16 A3 A3  hap.1.1 KIRc 
17 A3 A3  hap.1.2 KIRc 

あるいは、

df[df.duplicated(['ID_1', 'ID_2', 'locus'], keep=False)] 

df.duplicated(['ID_1', 'ID_2', 'locus'])またはdf[['ID_1', 'ID_2', 'locus']].duplicated()はブール配列を返します。対応する要素は、重複するエントリ(デフォルトではonly the first ones)に対してTrueです。 keep=Falseを渡すことで、複製されたすべてが真の値になるようにすることができます。残りはブールインデックスです。

+0

これはまさに私が探していたものです、多くのおかげでayhan! – Svalf

+0

あなたは大歓迎です。 :) – ayhan

関連する問題