【问题标题】:Python pandas DataFrame - Keep rows that have same information in 3 columnsPython pandas DataFrame - 将具有相同信息的行保留在 3 列中
【发布时间】:2016-07-18 19:54:29
【问题描述】:

如果有一个看起来像这样的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 和轨迹重复的行对。在上面的示例中,输出将如下所示:

    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

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

【问题讨论】:

  • 这表示在我想保留重复项时如何删除它们。我正在寻找的工具是“keep=False”。

标签: python pandas dataframe duplicates


【解决方案1】:

试试这个:

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 值。其余的是布尔索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 2018-12-26
    • 2014-01-18
    • 2021-11-02
    • 1970-01-01
    • 2020-01-02
    • 2020-06-13
    相关资源
    最近更新 更多