我有一个存储医疗记录的df,我需要确定一个人在出院日期之后去的第一个网站。 df按ID分组。
有3个选项:(1)在一个组中,如果任何行的begin_date与第一行end_date匹配,则返回该位置作为第一个站点(如果有两行满足此条件,则为正确)。 (2)如果第一个选项不存在,则选择初始位置后的第一个位置(3)否则,如果条件1和2不存在,则返回' Home'
<h2>My Phonebook</h2>
<input type="text" id="myInput" onkeyup="myFunction()" onclick="textFunc()" placeholder="Search for names.." title="Type in a name">
<ul id="myUL">
<li><a href="#">Adele</a></li>
<li><a href="#">Agnes</a></li>
<li><a href="#">Billy</a></li>
<li><a href="#">Bob</a></li>
<li><a href="#">Calvin</a></li>
<li><a href="#">Christina</a></li>
<li><a href="#">Cindy</a></li>
</ul>
预期结果:
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
的错误,但没有关于错误的在线帮助。
如果我删除了关于val2的"None of [Int64Index([8], dtype='int64')] are in the [index]"
条件,那么我不会遇到错误。
elif
我做错了什么?
答案 0 :(得分:2)
'ID' == 3
只有一行 - val2
表达式试图索引不存在的位置。
检查一个组是否只有一行。
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
>>>