Панды: T / F, если два диапазона пересекаются - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть два кадра данных, которые могут выглядеть следующим образом:

df1:

name    start    end
stuart  0        20
lamp    32       34
hamlet  16       100

df2:

name    start    end
LOXL1   30       40
FOXP3   0        11
INSN    43       70

Я видел много ответов, которые находятпересечение двух диапазонов.Мой любимый это:

range(max(start_1, start_2), min(end_1, end_2))

Отлично.Но для моего контекста мне просто нужно знать, пересекаются ли эти два диапазона вообще.Я не могу найти ответ, который подходит для моего варианта использования.Ожидаемый результат будет в основном получать имена из df2, для которых диапазон пересекается с df1.Ожидаемый результат будет:

name    start    end    intersects
stuart  0        20     FOXP3
lamp    32       34     LOXL1
hamlet  16       100    LOXL1|INSN

Или, если это проще (это решение на самом деле было бы идеально, но я могу работать с первым):

name    start    end    intersects
stuart  0        20     FOXP3
lamp    32       34     LOXL1
hamlet  16       100    LOXL1
hamlet  16       100    INSN

What I 'Эффективно зацикливается на том, получает ли Истина / Ложь из того, пересекаются ли диапазоны между двумя строками, без цикла for.Цикл for не является жизнеспособным решением для меня, потому что у меня 40 тыс. Строк по сравнению с 6-метровыми.

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Просто математическим путем + numpy broadcast

v1=df1.start.values
v2=df1.end.values
s1=df2.start.values
s2=df2.end.values
s=pd.DataFrame(((s2-v1[:,None])>0)&((s1-v2[:,None])<0)).dot(df2.name+'|').str[:-1]
s
Out[737]: 
0         FOXP3
1         LOXL1
2    LOXL1|INSN
dtype: object

#df1['New']=s.values
0 голосов
/ 01 декабря 2018

Вопрос, на который вам нужно ответить, исходя из того, что у вас уже есть, заключается в том, есть ли что-то в range, которое вы знаете.

if max(start_1, start_2) <= min(end_1, end_2):

Вы можете найти лучшие инструменты в модуле interval;это делает множество операций на известных интервалах;Я надеюсь, что вы можете использовать векторизованные инструменты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...