我有一个包含数千行如下形式的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。
你知道我能做什么吗?
发布于 2020-05-20 20:18:16
下面将为您提供基于value列的每个gene的前两个值。
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发布于 2020-05-20 20:07:00
您可以交换geneA、geneB并连接到数据帧,然后按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 1https://stackoverflow.com/questions/61912642
复制相似问题