【问题标题】:Python: Get a gene from column B with the highest value, from a group of genes related to each gene in column APython:从与A列中每个基因相关的一组基因中获取具有最高值的B列基因
【发布时间】:2019-02-25 12:37:18
【问题描述】:

我有一个编程问题,目前我想不出解决方案。我有一个表设置如下:

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 列中提取一个替换基因。该值表示 Gene B 与 Gene A 的“相似程度”,因此我想获得一个具有最高可能值的 GeneB,即尽可能接近 1。

在某些情况下,与基因 2 一样,存在共享相同值的基因。在这里我也想得到彼此之间距离最短的基因。

我应该如何在 Python 中执行此操作?谢谢!

编辑:我的预期输出是有一个如下表:

GeneA   GeneB   Value   Distance
1       102     1
2       201     1
3       301     0.9
4       401     1

在GeneB的201或202之间选择的地方,是选择与GeneA距离最短的一个,这是通过获取它们的遗传位置差异而输出的。

【问题讨论】:

  • 你能添加预期的输出吗?
  • 另外,你说的距离是怎么定义的?
  • 当然,我在原始帖子中添加了预期输出。就距离而言,它只是一个基于GeneA和GeneB碱基对位置差异的数字。
  • 好吧,还有一件事我不确定。您是否已经有了距离(即,它只是从您的示例中丢失,但您实际上已经在您的数据集中拥有它)?还是你打算用上面的数据来计算(抱歉我对遗传学真的不熟悉)。
  • 没关系!我实际上已经有了距离,我打算计算它(因为它目前在列中为“PositionA”和“PositionB”。我不确定如何在示例表中表示它,所以我把它留空了。你的解决方案下面看起来正是我所需要的,所以我会看看它是否有效。

标签: python pandas


【解决方案1】:

我的回答灵感来自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

【讨论】:

  • df = df.sort_values(['Value', 'Distance'], ascending=False) 将按降序对值和距离进行排序。我想要求是距离应该是最小的。我建议进行一项更改 - 将升序参数作为列表传递 [False,True] 这将确保值为最大值,距离为最小值
  • 好吧,这仍然很有效,非常感谢 Leopold 和 Sharad!
猜你喜欢
  • 2020-09-06
  • 1970-01-01
  • 1970-01-01
  • 2019-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多