在熊猫中按组合并表

时间:2020-04-14 12:09:53

标签: python pandas

我有一个包含人类基因的数据集。我想检查等位基因的所有可能组合。所以我的df:

Human     Gene    AllelA    AllelB
1         gene1      C        C
1         gene2      A        T
1         gene3      G        G
1         gene4      T        A
2         gene1      C        C
2         gene2      G        G
3         gene4      C        C
4         gene1      A        T
5         gene4      C        C

现在我需要进行所有检查,因此我认为更好的方法是将数据透视表枢转到(首先将基因合并到一列Allele1Allele2中,因此在Human1的Gene1中,它将包含一列:CC): >

humanNumber     Gene1    Gene2    Gene3   Gene4  

然后对合并列做一些魔术。但是现在我有一个枢纽问题。当我尝试时,出现错误提示我的索引不是唯一的(实际上不是这样),因此我尝试按表分组,但是完全不知道如何旋转它。

我知道-我做到了-我可以在纯python中循环执行此操作,但是首先:它很长(80k人x 2 | 3 | 4个基因),其次:我认为熊猫可以做得更好。我只是无法应用数据透视功能。以不同的方式尝试过,使用了不同的索引...但是仍然存在问题。

期望:

  humanNumber     Gene1    Gene2    Gene3   Gene4  
       1            CC       AT       GG      TA
etc.

有人可以帮我做对吗?

P.S。整个数据框都由字符串填充

1 个答案:

答案 0 :(得分:3)

问题是HumanGene的重复项,您可以检查它们:

print (df)
   Human   Gene AllelA AllelB
0      1  gene1      C      C <- added dupe row for test
1      1  gene1      C      C
2      1  gene2      A      T
3      1  gene3      G      G
4      1  gene4      T      A
5      2  gene1      C      C
6      2  gene2      G      G
7      3  gene4      C      C
8      4  gene1      A      T
9      5  gene4      C      C

print (df[df.duplicated(['Human','Gene'], keep=False)])
   Human   Gene AllelA AllelB
0      1  gene1      C      C
1      1  gene1      C      C

如果可能,您可以通过DataFrame.drop_duplicates删除它们:

df = (df.drop_duplicates(['Human','Gene'])
        .assign(Alle = lambda x: df['AllelA'] + df['AllelB'])
        .pivot('Human','Gene','Alle'))
print (df)
Gene  gene1 gene2 gene3 gene4
Human                        
1        CC    AT    GG    TA
2        CC    GG   NaN   NaN
3       NaN   NaN   NaN    CC
4        AT   NaN   NaN   NaN
5       NaN   NaN   NaN    CC