#python #arrays #list
Вопрос:
У меня есть исходный набор data
данных, сгруппированный по id
:
id x y
1 0.21 1.00
1 0.34 0.66
1 0.35 0.33
1 0.94 0.00
2 0.11 1.00
2 0.90 0.66
2 0.31 0.33
2 0.33 0.00
3 0.12 1.00
3 0.34 0.71
3 0.64 0.43
3 0.89 0.14
4 0.32 1.00
4 0.33 0.66
4 0.45 0.33
4 0.76 0.00
Я пытаюсь предсказать максимум y
на основе переменной x
, рассматривая группы. Во-первых, я train_test_split
основывался на группах:
data_train
id x y
1 0.21 1.00
1 0.34 0.66
1 0.35 0.33
1 0.94 0.00
2 0.11 1.00
2 0.90 0.66
2 0.31 0.33
2 0.33 0.00
и
data_test
id x y
3 0.12 1.00
3 0.34 0.66
3 0.64 0.33
3 0.89 0.00
4 0.33 1.00
4 0.32 0.66
4 0.45 0.33
4 0.76 0.00
После обучения модели и ее применения data_test
я получаю:
y_hat
0.65
0.33
0.13
0.00
0.33
0.34
0.21
0.08
Я пытаюсь преобразовать y_hat
так, чтобы максимум в каждой из начальных групп был 1.00
; в противном случае это 0.00
:
y_hat_transform
1.00
0.00
0.00
0.00
0.00
1.00
0.00
0.00
Как бы я это сделал? Обратите внимание, что группы могут быть разного размера.
Изменить: Чтобы упростить проблему, у меня есть id_test
и y_hat
, где
id_test
3
3
3
3
4
4
4
4
и я пытаюсь это сделать y_hat_transform
.
Ответ №1:
id y
0 3 0.65
1 3 0.65
2 3 0.33
3 3 0.13
4 3 0.00
5 4 0.33
6 4 0.34
7 4 0.21
8 4 0.08
# Find max rows per group and assign them values
# I see 1.0 and 0.0 as binary so directly did it by casting to float
# transform gives new column of same size and repeated maxs per group
id_y['y_transform'] = (id_y['y'] == id_y.groupby(['id'])['y'].transform(max)).astype(float)