Pandas группирует столбец и устанавливает максимальное значение в другом столбце как 1, иначе 0 - PullRequest
0 голосов
/ 25 января 2020

У меня есть фрейм данных следующим образом:

df = pd.DataFrame({'unique_id':['x','x' , 'y', 'y'], 'chk':[5, 6, -4, -5], 'score':[5.52363, 6.73939, 7.53637, 3.08375]})

Я хочу сгруппировать по столбцу 'unique_id' и найти максимальное значение в столбце 'score' и установить максимальное значение как 1, а другие как 0.

Я пытался df['result'] = df.groupby('unique_id').apply(lambda x: [x.score.idxmax()])

Но вместо этого он дает мне нулевые значения. Мой ожидаемый результат -

unique_ID  chk  score  result
x          5   5.52363   0
x          6   6.73939   1
y         -4   7.53637   1
y         -5   3.08375   0

1 Ответ

2 голосов
/ 25 января 2020

Используйте GroupBy.transform с Series.eq, чтобы проверить, являются ли значения max и Series.astype для получения 0 или 1

df['result'] = df['score'].eq(df.groupby('unique_id')
                                .score
                                .transform('max')).astype(int)
print(df)
  unique_id  chk    score  result
0         x    5  5.52363       0
1         x    6  6.73939       1
2         y   -4  7.53637       1
3         y   -5  3.08375       0
...