У меня есть кадр данных с помощью следующей формыДобавить столбец в кадр данных на основе процентилей, рассчитанных группой
Group Value
A 0.20
A 0.86
A 1.42
A 0.35
B 1.77
B 0.56
B 0.21
. .
. .
Я хочу, чтобы добавить столбец Alert
, который принимает два значения:
- '1', если
Value
для конкретногоGroup
либо превышает1 - thr
процентиль или меньше, чемthr
процентильValue
для каждого конкретногоGroup
, гдеthr
является порогом, определяемым пользователем - '0' в противном случае.
Например, говорят, что 1 - thr
и thr
процентили для Value
в Group
А являются 1,0 и 0,25; соответствующие значения нового столбца (назовем его Alert
) будет
Group Value Alert
A 0.20 1
A 0.86 0
A 1.42 1
A 0.35 0
Я попытался следующие
def make_alert(x, thr):
if x >= np.percentile(x, 1 - thr) | x <= np.percentile(x, thr):
return 0
else:
return 1
pdf.groupby('Name').apply(lambda x: make_alert(x['Value'], AlertThr))
Однако это не работает, как моя функция применяется к каждому элементу соответствующего и поэтому верхний и нижний пороги для каждой группы не вычисляются.
Не могли бы вы дать подсказку о том, как это сделать?
Так что в этом случае вы делаете новый столбец '[«Сигнал»]', который имеет значение '[«Value»]' колонке после применения вашего 'make_alert' функции. Хотя я не всегда уверен, как вы передаете два аргумента своей функции, поскольку я только когда-либо использовал '.apply' для передачи только содержимого ячейки. Возможно, проверьте [документацию] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html) –
Если я делаю 'pdf.groupby ('Group'). Quantile ([ thr, 1 - thr]) 'Я получаю таблицу с верхними и нижними границами принятия решения для каждой« Группы », то, что я не вижу, это то, как я использую значения в этой таблице для вычисления необходимых мне оповещений. –