Как эффективно сгруппировать значения в перекрывающиеся с помощью панд?

Я хотел бы объединить все значения из столбца типа float в ячейки, которые перекрываются. Результирующий столбец может быть серией одномерных векторов с булевыми значениями - один вектор для каждого значения из исходного столбца. Полученные векторы содержат True для каждого бина значение попадает в и False для других бункеров.

Например, если у меня есть четыре корзины [(0, 10), (7, 20), (15, 30), (30, 60)]и исходное значение 9,5, результирующий вектор должен быть [True, True, False, False],

Я знаю, как перебирать все диапазоны с помощью пользовательской функции, используя "apply", но есть ли способ выполнить это объединение более эффективно и кратко?

1 ответ

Решение

Будет ли простое понимание списка удовлетворить ваши потребности?

Bins = [(0, 10), (7, 20), (15, 30), (30, 60)]
Result = [((9.5>=y[0])&(9.5<=y[1])) for y in Bins]

Если ваши данные хранятся в столбце data DataFrame панд (df) тогда вы можете определить функцию:

def in_ranges(x,bins):
    return [((x>=y[0])&(x<=y[1])) for y in bins]

и примените его к столбцу:

df[data].apply(lambda x: pd.Series(in_ranges(x,Bins),Bins))
Другие вопросы по тегам