Панды: Добавить флаг, используя групповой расчет - PullRequest
0 голосов
/ 14 сентября 2018

Я хочу сначала получить третий квантиль, сгруппированный по (группа и уровень в этом примере).

d = pd.DataFrame({'customer': ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'], 
                  'group': ['A', 'B', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A'],
                  'level': ['Z', 'X', 'X', 'X', 'Z', 'Z', 'Z', 'X', 'X', 'Z'],
                  'value': [0.4, 0.6, 0.7, 0.6, 0.3, 0.5, 0.2, 0.7, 0.5, 0.2]})

d.groupby(['group', 'level']).quantile(0.75)

Теперь у меня есть квантиль для каждой группы.Я хочу добавить столбец к исходному df на основе значения groupby.

   0.75 value
group   level   
A   X   0.67
    Z   0.45
B   X   0.65
    Z   0.27

Результат будет примерно таким, когда я добавлю новый столбец на основе, если значение будет выше, чем квантированный тогдаЯ добавлю 1, если ниже, то добавлю 0.

    customer    group   level   value     new
       1          A       Z       0.40     1
       2          B       X       0.60     0

Спасибо

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Использование только lt и сопоставление индекса

q = d.groupby(['group', 'level']).quantile(0.75)
d.set_index(['group', 'level']).value.lt(q.value).astype(int)

group  level
A      X        1
       X        0
       Z        1
       Z        0
       Z        1
B      X        1
       X        0
       X        1
       Z        0
       Z        1
Name: value, dtype: int64
0 голосов
/ 14 сентября 2018

IIUC:

d['new'] = (d.value > d.groupby(['group', 'level'])['value']
                       .transform('quantile', 0.75)).astype(int)

>>> d
  customer group level  value  new
0        1     A     Z    0.4    0
1        2     B     X    0.6    0
2        3     B     X    0.7    1
3        4     A     X    0.6    0
4        5     B     Z    0.3    1
5        6     A     Z    0.5    1
6        7     B     Z    0.2    0
7        8     A     X    0.7    1
8        9     B     X    0.5    0
9       10     A     Z    0.2    0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...