我有一个包含人类基因的数据集。我想检查等位基因的所有可能组合。所以我的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。整个数据框都由字符串填充
答案 0 :(得分:3)
问题是Human
和Gene
的重复项,您可以检查它们:
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