Как сгруппировать по столбцу и сделать нормализацию? - PullRequest
0 голосов
/ 18 января 2019

Предположим, у меня есть такой тип даты:

    A      B      C       
0  foo    one     1
1  bar    one     2
2  foo    two     1
3  bar  three     2
4  foo    two     3
5  bar    two     5
6  foo    one     2
7  foo  three     5
8  bar    one     4

Я хочу сгруппировать по «B» и выполнить нормализацию по столбцу «C» для каждого конкретного «B». Я хотел бы сделать простую минимальную максимальную норму, как х / макс (х)

grouped_b = df.groupby('B')

def norm(value):
    return value/value.max()

norm_B = grouped_b['C'].agg(norm)

Результат будет выглядеть так:

    A      B      C       
0  foo    one    0.25
1  bar    one    0.5
2  foo    two    0.2
3  bar  three    0.25
4  foo    two    0.6
5  bar    two     1
6  foo    one    0.5
7  foo  three     1
8  bar    one     1

Ответы [ 2 ]

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

Использование transform

df.C/=df.groupby(['B']).C.transform('max')
0 голосов
/ 18 января 2019

Используйте GroupBy.transform для возврата Series с тем же размером, что и оригинал df:

grouped_b = df.groupby('B')

def norm(value):
    return value/value.max()

df['C'] = grouped_b['C'].transform(norm)

print (df)
     A      B     C
0  foo    one  0.25
1  bar    one  0.50
2  foo    two  0.20
3  bar  three  0.40
4  foo    two  0.60
5  bar    two  1.00
6  foo    one  0.50
7  foo  three  1.00
8  bar    one  1.00

Вы также можете использовать lambda функцию:

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