Вычесть значения из максимального значения в группах - PullRequest
0 голосов
/ 07 мая 2018

Попытка взять df и создать новый столбец, основанный на разнице между значением в группе и максимальными группами:

Group Value
A     4
A     6
A     10   
B     5
B     8
B     11

Получите новый столбец "from_max"

from_max
6
4
0
6
3
0

Я пробовал это, но ошибка ValueEr:

df['from_max'] = df.groupby(['Group']).apply(lambda x: x['Value'].max() - x['Value'])

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 07 мая 2018

Вариант 1
векторизация groupby + transform

df['from_max'] = df.groupby('Group').Value.transform('max') - df.Value

df
  Group  Value  from_max
0     A      4         6
1     A      6         4
2     A     10         0
3     B      5         6
4     B      8         3
5     B     11         0

Вариант 2
выровненное по индексу вычитание

df['from_max'] = (df.groupby('Group').Value.max() - df.set_index('Group').Value).values

df
  Group  Value  from_max
0     A      4         6
1     A      6         4
2     A     10         0
3     B      5         6
4     B      8         3
5     B     11         0
0 голосов
/ 07 мая 2018

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

df['From_Max']=df.groupby('Group').Value.max().reindex(df.Group).values-df.Value.values
df
Out[579]: 
  Group  Value  From_Max
0     A      4         6
1     A      6         4
2     A     10         0
3     B      5         6
4     B      8         3
5     B     11         0
0 голосов
/ 07 мая 2018

Я думаю, что нужно GroupBy.transform для возврата Series с тем же размером, что и оригинал DataFrame:

df['from_max'] = df.groupby(['Group'])['Value'].transform(lambda x: x.max() - x)

Или:

df['from_max'] = df.groupby(['Group'])['Value'].transform(max) - df['Value']

Альтернатива - Series.map по совокупности max:

df['from_max'] = df['Group'].map(df.groupby(['Group'])['Value'].max()) - df['Value']

print (df)
  Group  Value  from_max
0     A      4         6
1     A      6         4
2     A     10         0
3     B      5         6
4     B      8         3
5     B     11         0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...