Это немного странно, я пытаюсь использовать данные, если:
1) значения в столбце находятся в определенном диапазоне чисел И
2) другие строки в той же группе, что и первая, также имеют другой диапазон чисел
Итак, чтобы уточнить, у меня есть столбец данных 'tof' и другой столбец с именем 'id', который группирует строки, как находящиеся в одном и том же событии. Я хочу сравнить строки из одного и того же события (с тем же идентификатором), чтобы увидеть, имеет ли одна из строк значение tof в определенном диапазоне, а одна из других строк имеет значение tof в другом диапазоне. Если это так, я хочу сохранить все строки с этим идентификатором, а если это не так, я хочу выбросить эти строки.
tof id
9 2004847.0 10.0
10 2066116.0 10.0
11 5441996.0 10.0
12 5642443.0 10.0
17 1979815.0 15.0
18 1992399.0 15.0
19 2008208.0 15.0
20 2098060.0 15.0
21 3980280.0 15.0
Я бы сохранял диапазоны следующим образом:
min 1 , max 1 , min 2 , max2
channelBounds = np.array([[2000000,3000000,5000000,6000000],
[1000000,2000000,4000000,5000000]])
Где первые два числа в каждой строке - это мин и макс одной из строк данных, а вторые два - это мин и макс другой строки данных с тем же идентификатором. Надеюсь, я смогу выполнить итерации по нескольким наборам границ, как показано.
Например, с указанными выше данными и ограничениями строка 9 и строка 11 вписываются в первое ограничение (9 - между 2000000 и 3000000, а 11 - между 5000000 и 6000000), поэтому я бы сохранил строки с идентификатором 10, но ни один из строки с идентификатором 15 соответствуют любому из ограничений (две строки с идентификатором 15 не имеют значений, которые одновременно удовлетворяют обоим диапазонам ограничений), поэтому в этом случае будут удалены строки с идентификатором 15.
Идея с двумя линиями ограничений заключается в том, что несколько шлюзов могут применяться одновременно, и наборы идентификаторов, которые удовлетворяют любому из перечисленных наборов, будут сохранены.
Я могу видеть, как это сделать, перебирая строки напрямую, но мне было интересно, есть ли более эффективный (как векторизованный) способ сделать это.
Спасибо!