Python pandas DataFrame - 保留3列中具有相同信息的行

时间:2016-07-18 11:38:25

标签: python pandas dataframe duplicates

如果有一个如下所示的python DataFrame:

    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和基因座。 我想只保留3列ID_1,ID_2和locus重复的行对。在上面的示例中,输出将如下所示:

    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

我希望有人可以帮助我。提前谢谢!

1 个答案:

答案 0 :(得分: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()返回一个布尔数组。对于重复的条目,相应的元素为True(默认情况下为only the first ones)。通过传递keep=False,您可以将所有重复项设置为True值。其余的是布尔索引。