У меня есть следующий фрейм данных python
Variable_1 Variable_2 Variable_3 Target
G M I 230
G M I 231
G M I 233
G M I 231
G M I 230
G M I 214
G M L 211
G M L 212
G M L 123
G M L 345
G N J 32
G N J 123
G N J 234
G N O 2345
G N O 432
G N O 455
G N O 543
G N O 333
Рассмотрим только Variable_3. Для каждой категории Variable_3 я хочу сравнить последнюю из этого Target с первым значением Target. Например:
Из приведенного выше примера я хотел бы, чтобы мой результирующий набор данных выглядел так:
Variable_1 Variable_2 Variable_3 Target Output
G M I 230 -1
G M I 231 -1
G M I 233 -1
G M I 231 -1
G M I 230 -1
G M I 214 -1
G M L 211 1
G M L 212 1
G M L 123 1
G M L 345 1
G N J 32 1
G N J 123 1
G N J 234 1
G N O 2345 -1
G N O 432 -1
G N O 455 -1
G N O 543 -1
G N O 333 -1
Пытаться:
df.loc[:, 'Output'] = df.groupby('Variable_3')['Target']\
.transform(lambda x: -1 if x.iloc[-1] > x.iloc[0] else 1)
Группируйте данные с помощью Variable_3 и найдите первый и последний целевые объекты в каждой группе. Сравните их:
groups = df.groupby('Variable_3')['Target']
output = groups.first() > groups.last()
Объедините вывод со старым фреймворком данных на основе Variable_3 в качестве индекса:
df = df.set_index('Variable_3').join(output, rsuffix='_r').reset_index()
Преобразуйте логические значения в 1s и -1s:
import numpy as np
df['Target_r'] = np.where(df['Target_r'], -1, 1)
Наконец, измените имя нового столбца:
df.rename(columns={'Target_r' : 'Output'}, inplace=True)