Рассчитать разницу для подмножеств строк в Python - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть следующий фрейм данных 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.Для каждой категории переменной_3 я хочу сравнить последнюю из этой цели с первым значением цели.Например:

  • , когда переменная_3 равна «I», тогда я сравниваю 214 (что является последним значением) с 230, которое является «первым» значением, и если последнее значение больше первогоЗатем я создаю новое поле с именем «Выход», которое равно 1, в противном случае поле «Выход» равно -1.

Из приведенного выше примера я хотел бы, чтобы мой результирующий набор данныхвыглядеть так:

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

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Попробуйте:

df.loc[:, 'Output'] = df.groupby('Variable_3')['Target']\
                        .transform(lambda x: -1 if x.iloc[-1] > x.iloc[0] else 1)
0 голосов
/ 23 сентября 2018

Сгруппируйте данные по Variable_3 и найдите первую и последнюю цель в каждой группе.Сравните их:

groups = df.groupby('Variable_3')['Target']
output = groups.first() > groups.last()

Объедините выходные данные со старым кадром данных на основе переменной_3 в качестве индекса:

df = df.set_index('Variable_3').join(output, rsuffix='_r').reset_index()

Преобразуйте логические значения в 1 с и -1 с:

import numpy as np
df['Target_r'] = np.where(df['Target_r'], -1, 1)

Наконец, измените имя нового столбца:

df.rename(columns={'Target_r' : 'Output'}, inplace=True)
...