Как сопоставить несколько столбцов в панде DataFrame для «интервала»?
У меня есть следующие панды DataFrame:
import pandas as pd
df = pd.DataFrame('filename.csv')
print(df)
order start end value
1 1342 1357 category1
1 1459 1489 category7
1 1572 1601 category23
1 1587 1599 category2
1 1591 1639 category1
....
15 792 813 category13
15 892 913 category5
....
Итак, естьorder
столбец включает в себя много строк каждая, а затем диапазон / интервал отstart
вend
для каждого ряда. Каждая строка затем помечается определеннымvalue
(например, категория 1, категория 2 и т. д.)
Теперь у меня есть еще один датафреймkey_df
, Это в основном точно такой же формат:
import pandas as pd
key_df = pd.DataFrame(...)
print(key_df)
order start end value
1 1284 1299 category4
1 1297 1309 category9
1 1312 1369 category3
1 1345 1392 category29
1 1371 1383 category31
....
1 1471 1501 category31
...
Моя цель - взятьkey_df
фрейм данных и проверьте, есть ли интервалыstart:end
сопоставить любую из строк в исходном кадре данныхdf
, Если это так, эта строка вdf
должны быть помечены сkey_df
dataframe-хvalue
значение.
В нашем примере выше, фрейм данныхdf
в конечном итоге так:
order start end value key_value
1 1342 1357 category1 category29
1 1459 1489 category7 category31
....
Это потому, что если вы посмотрите наkey_df
, ряд
1 1345 1392 category29
с интервалом1::1345-1392
падает в интервале1::1342-1357
в оригиналеdf
, Аналогичноkey_df
строка:
1 1471 1501 category31
соответствует второму ряду вdf
:
1 1459 1489 category7 category31
Я не совсем уверен
(1) как выполнить эту задачу в пандах
(2) как эффективно масштабировать это в пандах
Можно начать с утверждения if, например,
if df.order == key_df.order:
# now check intervals...somehow
но это не использует структуру данных. Затем нужно проверить по интервалу, то есть что-то вроде(df.start =< key_df.start) && (df.end => key_df.end)
Я застрял. Каков наиболее эффективный способ сопоставления нескольких столбцов в «интервале» в пандах? (Создание нового столбца, если выполняется это условие, является простым)