私は医療記録を保存するdfを持っており、退院日後に人が最初に行く場所を特定する必要があります。dfはIDでグループ化されています。
3つのオプションがあります。(1)グループ内で、いずれかの行に最初の行end_dateと一致するbegin_dateがある場合、その場所を最初のサイトとして返します(この条件を満たす行が2つある場合は、どちらも正しいです)。(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)
私は何が間違っているのですか?
'ID' == 3
行は1つだけval2
です。式は、そこにない位置にインデックスを付けようとしています。
グループの最初の行が1つだけかどうかを確認します。
def First(x):
if len(x) == 1:
return_value = 'Home'
else:
val = x.loc[x['begin_date'] == x['end_date'].iloc[0], 'location']
val2 = x.loc[x[x.location=='initial'].index+1, 'location']
if not val.empty:
return_value = val.iloc[0]
elif not val2.empty:
return_value = val2.iloc[0]
return return_value
gb = df.groupby('ID')
>>> gb.apply(First)
ID
1 rehab
2 nursing
3 Home
4 nursing
dtype: object
>>>
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加