我有一个编程问题,目前我无法想出解决办法。我有一张桌子摆在下面:
GeneA GeneB Value Distance
1 101 0.9
1 102 1
1 103 0.8
2 201 1
2 202 1
3 301 0.9
3 302 0.8
3 303 0.8
4 401 1
在这里,我想为GeneA列中的每个基因从GeneB列中提取一个替换基因。该值表示“相似”基因B与基因A的关系,因此我希望得到一个尽可能高值的GeneB,即尽可能接近1。
在某些情况下,就像基因2一样,也有相同值的基因。在这里,我还想得到彼此之间距离最短的基因。
我应该如何用Python来完成这个任务呢?谢谢!
编辑:我打算输出的表如下所示:
GeneA GeneB Value Distance
1 102 1
2 201 1
3 301 0.9
4 401 1
在选择201或202之间的GeneB,是选择与GeneA的最短距离,这是由他们的遗传位置的差异输出。
发布于 2018-09-21 06:57:48
我的回答受到this SO question的启发。
就你而言:
import pandas as pd
df = pd.DataFrame({
'GeneA': [ '1', '1', '1', '2', '2', '3', '3', '3', '4' ],
'GeneB': [ '101', '102', '103', '201', '202', '301', '302', '303', '401'],
'Value': [ 0.9, 1, 0.8, 1, 1, 0.9, 0.8, 0.8, 1 ],
})
# Sort by decreasing `Value` and then by decreasing `Distance`
df = df.sort_values(['Value', 'Distance'], ascending=False)
# Group by `GeneA` and select only the first row
df = df.groupby(['GeneA'], sort=False).first()
df
[Out]:
GeneB Value
GeneA
1 102 1.0
2 201 1.0
4 401 1.0
3 301 0.9
https://stackoverflow.com/questions/52438006
复制相似问题