python – Pandas按日期获取以前的数据帧
发布时间:2020-12-20 12:32:28 所属栏目:Python 来源:网络整理
导读:我正在使用一些数据,我必须得到发生日期.例如,假设我们正在处理医疗数据.每行都是来自患者的独特访问,尽管同一患者可以有多行.每行还包含有关访问类型的信息,无论是常规还是急诊室. 我需要通过,并且在每次访问之前,先获取患者之前进入急诊室的日期.例如,我想
我正在使用一些数据,我必须得到发生日期.例如,假设我们正在处理医疗数据.每行都是来自患者的独特访问,尽管同一患者可以有多行.每行还包含有关访问类型的信息,无论是常规还是急诊室.
我需要通过,并且在每次访问之前,先获取患者之前进入急诊室的日期.例如,我想添加一列previous_er_discharge_date,如下所示: visit_id patient_id discharge_date visit_type previous_er_discharge_date 1 abc 2014-05-05 in-patient 2014-05-01 2 abc 2014-05-01 emergency NaT 3 def 2014-04-18 in-patient NaT 4 def 2014-03-12 in-patient 2014-02-12 5 def 2014-02-12 emergency NaT 所以我有一些工作,但它很慢.我基本上只是创建一个单独的ER访问数据框,并遍历主数据框,并查找该患者是否存在先前的ER日期,如果是,我采取第一个. (数据按discharge_date排序).我所拥有的代码的一般表示. er_visits = main_data[main_data.visit_type=='emergency'] prev_dates = [] for index,row in main_data.iterrows(): dates = er_visits.discharge_date[(er_visits.patient_id==row.patient_id) & (er_visits.discharge_date < row.discharge_date)].values if len(dates) > 0: prev_dates.append(dates[0]) else: prev_dates.append(pd.NaT) 上面的代码有效,但速度很慢,我希望能帮助找到更快的方法来实现这一目标.我正在使用的数据集有几十万行,这是必须每天运行的东西. 谢谢! 解决方法
在熊猫中,你基本上想要避免循环,因为它们会破坏性能.
她是一个类似于你的数据框架(我对日期很懒,所以它们是整齐的;这是同样的想法). df = pd.DataFrame({ 'id': ['abc','abc','def','def'],'date': [505,501,418,312,212]}) 这是一个函数,对于每个组,追加前一个日期: def prev_dates(g): g.sort(columns=['date']) g['prev'] = g.date.shift(-1) return g 所以我需要的是连接东西: >> df.groupby(df.id).apply(prev_dates) date id prev 0 505 abc 501 1 501 abc NaN 2 418 def 312 3 312 def 212 4 212 def NaN 编辑 如下面@julius所述,sort(columns =已被弃用,应该用“sort_values(by =”)代替. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |