首页 > 解决方案 > python - 如何在python的csv文件中为每个基因保留x个最高人相关值的基因对?

问题描述

我有一个包含数千行以下形式的 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

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

有什么想法我能做什么?

标签: pythonpandasdataframecsv

解决方案


您可以交换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

推荐阅读