如何在pandas中对数据框应用函数?

时间:2018-05-27 04:25:54

标签: python pandas dataframe apply

我有一个存储医疗记录的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

我做错了什么?

1 个答案:

答案 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
>>>