Функция векторизации над группами - PullRequest
0 голосов
/ 04 января 2019

У меня есть некоторые значения (X), которые принадлежат различным группам (G). Я хотел бы (N) разделить каждое значение на максимальное значение в группе, как показано в этой таблице:

enter image description here

Я пытался:

df = pd.DataFrame({'X': [0.2, 0.3, 0.4, 0.5, 0.6, 0.7],
                   'G': [1,   1,   1,   2,   2,   2  ]})

def fun (X):
    Norm = 1 / max(X)
    return X * Norm

f = np.vectorize(fun, otypes=[float])

df['N']   = f(df['X']).groupby('G')

но это дает:

TypeError: 'float' object is not iterable

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Вы можете использовать transform:

df['N'] = df['X']/df.groupby('G')['X'].transform('max')
0 голосов
/ 04 января 2019

Вы можете сделать:

df['N']  = df.groupby('G')['X'].apply(lambda x: x / x.max())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...