2016-08-17 5 views
1

У меня есть кадр данных с помощью следующей формыДобавить столбец в кадр данных на основе процентилей, рассчитанных группой

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)) 

Однако это не работает, как моя функция применяется к каждому элементу соответствующего и поэтому верхний и нижний пороги для каждой группы не вычисляются.

Не могли бы вы дать подсказку о том, как это сделать?

ответ

0

Я думаю .... (новичок в этом) что использование .apply означает, что функция применяется к содержимому столбца «Имя». Вместо того, чтобы рассмотреть ...

df['Alert'] = df['Value'].apply(your_function) 
+0

Так что в этом случае вы делаете новый столбец '[«Сигнал»]', который имеет значение '[«Value»]' колонке после применения вашего 'make_alert' функции. Хотя я не всегда уверен, как вы передаете два аргумента своей функции, поскольку я только когда-либо использовал '.apply' для передачи только содержимого ячейки. Возможно, проверьте [документацию] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html) –

+0

Если я делаю 'pdf.groupby ('Group'). Quantile ([ thr, 1 - thr]) 'Я получаю таблицу с верхними и нижними границами принятия решения для каждой« Группы », то, что я не вижу, это то, как я использую значения в этой таблице для вычисления необходимых мне оповещений. –