Как эффективно сгруппировать значения в перекрывающиеся с помощью панд?
Я хотел бы объединить все значения из столбца типа 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))