Python 大熊猫群体多指标全对比较

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)

问题(正式)

我有一个带有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)<100
如果任何组y满足这些条件,则最终结果中不应包含来自x或y的行


相同的问题,已应用

我在生物信息学的背景下使用这个。具体来说,(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-我已经添加了我问题的特定上下文和一些示例数据。请让我知道,如果有什么我可以补充。