我有一张30万行的桌子。它包含了动物样本的基因数据。我有43k只动物,每只都有190-202个基因(它们可能不同,例如一只动物可能有AA1基因,第二只动物可能没有那个基因)。 示例数据框如下所示:
Gene_Name AnimalNumber Allele1 Allele2
AA1 0001 B B
DSD 0001 A B
KAD334 0001 A B
EE2 0001 A A
AA1 0002 A A
DSD 0002 A A
EE2 0002 A B
COPA 0002 B B
我需要做什么?你知道吗
df[Gene_name].value_counts()
就可以了。你知道吗我认为这是我的弱点,因为我只是把所有SNP的名字都列出来,然后创建这样的循环:
for i in range(len(genelist)):
pick = len(df[df['Gene_Name']==genelist[i]].where(genotyp['Allele1'] == 'A' | genotyp['Allele2'] == A).dropna())
listOfResults.append(pick)
我绕了三圈。一个用于AA,一个用于BB,一个用于AB。这是可行的,但需要几个小时:( 那么,如何做到这一点的熊猫没有obvius环?我是说更快。。。你知道吗
Expect result:
Gene_Name all AA AB BB
AA1 3330 2230 1000 0
DSD 1000 870 100 30
...
etc.
如我所说,我有“全部”一栏。如何加速第二、第三和第四阶段的数据收集。你知道吗
我没有发现对我的问题有任何帮助。你知道吗
我将非常感谢你的帮助。你知道吗
听起来像是交叉表
使用groupby和apply:
在您显示的数据帧上
编辑: 上面的代码只是将所有具有“A”作为等位基因1或等位基因2的行分组,并统计出现的次数。所以呢
使用
&
而不是|
会导致要获得所有不同组合的计数,您可以按基因和等位基因分组:
我在10万个条目的合成数据集上进行了测试,大约需要一秒钟。你知道吗
或者,
pd.crosstab
,正如@Mark Wang所建议的,也是一个好主意相关问题 更多 >
编程相关推荐