首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中的csv文件中为每个基因保留x个人相关值最高的基因对?

如何在python中的csv文件中为每个基因保留x个人相关值最高的基因对?
EN

Stack Overflow用户
提问于 2020-05-20 20:03:10
回答 2查看 41关注 0票数 4

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

代码语言:javascript
复制
geneA geneB value
a     b     5
a     c     3
a     d     7
b     c     8
b     d     1

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

代码语言:javascript
复制
a d 7
a b 5
b c 8
b a 5

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

你知道我能做什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-20 20:18:16

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

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2020-05-20 20:07:00

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

代码语言:javascript
复制
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)
)

输出:

代码语言:javascript
复制
  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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61912642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档