Python: получить ген из столбца B с наибольшим значением из группы генов, связанных с каждым геном в столбце A - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть проблема программирования, решение которой я не могу найти в данный момент.У меня есть таблица, настроенная как показано ниже:

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.

В некоторых случаях, как и в случае с Gene 2, существуют гены, имеющие одинаковые значения.Здесь я также хотел бы получить гены, которые имеют наименьшее расстояние между собой.

Как мне поступить так в Python?Спасибо!

РЕДАКТИРОВАТЬ: я хочу получить следующую таблицу:

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

Где при выборе между 201 или 202 для GeneB выбирается таблица с кратчайшим расстоянием с GeneA., который был выведен путем получения различий в их генетических позициях.

1 Ответ

0 голосов
/ 21 сентября 2018

Мой ответ был вдохновлен этим ТАКИМ вопросом .

В вашем случае:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...