【问题标题】:How to keep x highest person correlation valued pairs of genes for each gene in a csv file in python?python - 如何在python的csv文件中为每个基因保留x个最高人相关值的基因对?
【发布时间】:2020-09-06 19:01:22
【问题描述】:

我有一个包含数千行格式如下的 csv 文件:

geneA geneB value
a     b     5
a     c     3
a     d     7
b     c     8
b     d     1

我想为每个基因提取与其他基因在最高值方面最匹配的两个。对于前一个例子,基因 a 和 b 的结果是:

a d 7
a b 5
b c 8
b a 5

基于answer,我得到了部分我想要的结果,因为它不测试第一列和第二列,而只测试第一列。所以结果是不正确的,即它在检查 b 的最佳值时没有考虑a b 5 行。

任何想法我能做什么?

【问题讨论】:

    标签: python pandas dataframe csv


    【解决方案1】:

    您可以交换geneAgeneB 并连接到数据框,然后按value 排序并使用groupby().head()

    total_df = pd.concat([df, df.rename(columns={'geneA':'geneB','geneB':'geneA'})])
    
    (total_df.sort_values(['geneA','value'], ascending=[True,False])
       .groupby('geneA').head(2)
    )
    

    输出:

      geneA geneB  value
    2     a     d      7
    0     a     b      5
    3     b     c      8
    0     b     a      5
    3     c     b      8
    1     c     a      3
    2     d     a      7
    4     d     b      1
    

    【讨论】:

      【解决方案2】:

      下面将为您提供基于 value 列的每个 gene 的前 2 个值。

      In [1093]: A = df.groupby('geneA')['value'].nlargest(2).reset_index()
      In [1096]: A.rename(columns={'geneA': 'gene'}, inplace=True)
      
      In [1097]: B = df.groupby('geneB')['value'].nlargest(2).reset_index()    
      In [1098]: B.rename(columns={'geneB': 'gene'}, inplace=True) 
      
      In [1102]: d = A.append(B)
      
      In [1111]: d.groupby('gene')['value'].nlargest(2).reset_index().drop('level_1', 1)
      Out[1111]: 
        gene  value
      0    a      7
      1    a      5
      2    b      8
      3    b      5
      4    c      8
      5    c      3
      6    d      7
      7    d      1
      

      【讨论】:

        猜你喜欢
        • 2019-02-25
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-17
        相关资源
        最近更新 更多