如果有一个如下所示的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
我希望有人可以帮助我。提前谢谢!
答案 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值。其余的是布尔索引。