Python 大熊猫群体多指标全对比较
问题(正式) 我有一个带有a、b、c、d、e列的平面表df,其中a和b是一对多,正如(b和c)和(c和d)一样。d是唯一索引,e是任意整数 设grouped=df.groupby(by=['a','b','c'])。然后,每个组基本上由其标签和一组键值对{d:e}组成。如果某个组x中没有其他组y,我希望保留该组x中的所有行,以便Python 大熊猫群体多指标全对比较,python,numpy,pandas,bioinformatics,Python,Numpy,Pandas,Bioinformatics,问题(正式) 我有一个带有a、b、c、d、e列的平面表df,其中a和b是一对多,正如(b和c)和(c和d)一样。d是唯一索引,e是任意整数 设grouped=df.groupby(by=['a','b','c'])。然后,每个组基本上由其标签和一组键值对{d:e}组成。如果某个组x中没有其他组y,我希望保留该组x中的所有行,以便 x、 a==y.a x、 b!=y、 b 对于x.e中的任意值p和y.e中的任意值u,abs(p-u)
- x、 a==y.a
- x、 b!=y、 b
- 对于x.e中的任意值p和y.e中的任意值u,abs(p-u)<100
相同的问题,已应用 我在生物信息学的背景下使用这个。具体来说,(a,b,c,d,e)=(染色体,链,基因id,转录本id,转录起始位点)。每个基因正好位于一条染色体的一条链上(“+”或“-”,对应于DNA双螺旋的两条链),每个基因至少有一个转录本。每个转录本都有一个转录起始点(TSS),它是转录本在其染色体上的整数位置,以核苷酸碱基对(bp)为单位进行测量。同一基因的两个转录本可能或许多转录本不共享一个TSS 在生物学方面,我想找到没有双向启动子的基因。这意味着我想找到所有没有转录本的基因,它们的起始位点在基因的某个转录起始位点的n个范围内,位于相反的链上。作为旁注,为了便于举例,我选择了n=100,但更精确的生物学n可能在150到1000之间
示例数据
a = chromosome b = strand c = gene_id d = transcript_id e = tss
chr1 + ENSG001 ENST001 11865
chr1 + ENSG001 ENST002 11868
chr1 + ENSG001 ENST003 12006
chr1 - ENSG002 ENST004 29370
chr1 - ENSG002 ENST005 24886
chr1 + ENSG003 ENST006 29550
如果这是完整的数据列表且n=100,则所有行都将包含在答案中。但是,如果n=1000,则只应包括gene_id=ENSG001的前三行
注意事项 桌子是巨大的,所以做一个巨大的笛卡尔,把它削下来,等等是不可行的(而且也会很难看)。我可以使用哪些pandas/numpy方法来干净高效地选择符合条件的行?我应该使用groupby以外的东西,或者层次索引或其他东西吗?我对pandas语法不是特别熟悉,因此非常希望使用显式示例
谢谢大家! 如果您能提供一个小样本数据和一个所需输出的示例,以便我们更好地可视化和使用,这将非常有用。嗨,aus_lacy-我已经添加了我问题的特定上下文和一些示例数据。请让我知道,如果有什么我可以补充。