Сравнение на основе уникальных значений столбцов и установка флага на основе условия - PullRequest
0 голосов
/ 23 октября 2018

Я очень плохо знаком с пандами и датафреймами.Я ранее использовал SQL.Я приложил таблицу ниже:

    Sub     DOB         Groups      Mean Val  CheckVol
0   1112    1/1/1980    FirstVisit  6000      0
1   1121    2/2/1980    FirstVisit  6000      0
2   1138    3/3/1980    FirstVisit  6000      0
3   1227    4/4/1980    FirstVisit  6000      0
12  1443    1/1/1980    SecondVisit 5000      0
13  1443    2/2/1980    SecondVisit 5500      0
14  1481    3/3/1980    SecondVisit 6500      1
15  1482    4/4/1980    SecondVisit 5400      0
24  1483    2/2/1980    ThirdVisit  5400      0
25  1490    3/3/1980    ThirdVisit  5400      0

Итак, я хочу сделать группировку на основе DOB, поскольку это уникально, сравнивайте среднее значение с первым посещением.И если второе посещение больше первого, проверьте третье посещение, а если третье посещение меньше первого, измените метки.Таким образом, в таблице примера измените группы с 14 на ThirdVisit и с 25 на SecondVisitЯ подумал, может быть, создание нового столбца в качестве флага с именем checkVol в этом случае, и в случае 14 будет 1. Это то, что я имею, что очень неправильно:

checkVol = df.groupby('DOB').apply(lambda r: r)
#df.set_index('DOB', inplace=True)
df['checkVol'] = users

Спасибо за вашу помощь.

Кевин

1 Ответ

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

IIUC, Вы можете groupby столбец DOB, а затем использовать преобразование для столбца Mean Val с условием, которое вы описали.Это вернет логический столбец, поэтому вам просто нужно преобразовать его в int:

df['CheckVol'] = df.groupby('DOB')['Mean Val'].transform(lambda x: x > x.iloc[0]).astype(int)

>>> df
     Sub       DOB       Groups  Mean Val  CheckVol
0   1112  1/1/1980   FirstVisit      6000         0
1   1121  2/2/1980   FirstVisit      6000         0
2   1138  3/3/1980   FirstVisit      6000         0
3   1227  4/4/1980   FirstVisit      6000         0
12  1443  1/1/1980  SecondVisit      5000         0
13  1443  2/2/1980  SecondVisit      5500         0
14  1481  3/3/1980  SecondVisit      6500         1
15  1482  4/4/1980  SecondVisit      5400         0
24  1483  2/2/1980   ThirdVisit      5400         0
25  1490  3/3/1980   ThirdVisit      5400         0
...