У меня есть df, в котором хранятся медицинские записи, и мне нужно определить первый сайт, на который человек заходит после даты выписки.Df сгруппирован по идентификатору.
Есть 3 варианта: (1) внутри группы, если какая-либо из строк имеет начало_даты, совпадающее с первыми строками, конец_даты возвращает это местоположение как первый сайт (если естьдве строки, которые удовлетворяют этому условию, либо являются правильными).(2) если первая опция не существует, выберите первое местоположение после исходного местоположения (3) в противном случае, если условия 1 и 2 не существуют, верните «Домой»
ID color begin_date end_date location
1 red 2017-01-01 2017-01-07 initial
1 green 2017-01-05 2017-01-07 nursing
1 blue 2017-01-07 2017-01-15 rehab
1 red 2017-01-11 2017-01-22 Health
2 red 2017-02-22 2017-02-26 initial
2 green 2017-02-26 2017-02-28 nursing
2 blue 2017-02-26 2017-02-28 rehab
3 red 2017-03-11 2017-03-22 initial
4 red 2017-04-01 2017-04-07 initial
4 green 2017-04-05 2017-04-07 nursing
4 blue 2017-04-10 2017-04-15 Health
Ожидаемый результат:
ID first_site
1 rehab
2 nursing
3 home
4 nursing
Моя попытка ниже.Я получаю ошибку "None of [Int64Index([8], dtype='int64')] are in the [index]"
с небольшой онлайн-справкой об ошибке.Если я уберу условие elif
относительно val2, я не столкнусь с ошибкой.
def First(x):
#compare each group first and see if there are any locations that match
val = x.loc[x['begin_date'] == x['end_date'].iloc[0], 'location']
#find the first location after the initial stay
val2 = x.loc[x[x.location=='initial'].index+1, 'location']
if not val.empty:
return val.iloc[0]
elif not val2.empty:
return val2.iloc[0]
else:
return 'Home'
final = df.groupby('ID').apply(First).reset_index(name='first_site')
print (final)
Что я делаю не так?