如何解决统计上一年度的实例
我有一个非常大的住院数据集。对于每次录取,我想知道前一年发生的录取数量。 我的数据集采用数据框的形式,包括患者 ID 和住院日期。 我想要一个额外的列,说明上一年的录取人数 - 例如,下表中的“hosp_past_year”列。
患者 ID | 住院日期 | hosp_past_year |
---|---|---|
1 | 2020 年 11 月 2 日 | 2 |
1 | 2019 年 12 月 20 日 | 1 |
1 | 2019 年 11 月 30 日 | 1 |
1 | 2015 年 1 月 1 日 | 0 |
2 | 2019 年 4 月 17 日 | 1 |
2 | 2018 年 11 月 5 日 | 0 |
我已经编写了下面的代码(可以运行),但很想听听有关使其运行起来更简单、更省时的建议。
pat_l=list(df.patient_id.unique())
df["hospitalization_date"]=pd.to_datetime(df["hospitalization_date"])
df_fin=pd.DataFrame()
for pat in pat_l:
df_pat=df[df.patient_id==pat]
df_pat=df_pat.reset_index()
temp_df=pd.DataFrame()
for i in range(len(df_pat)):
temp_df[i]=(df_pat["hospitalization_date"]-df_pat["hospitalization_date"][i]).dt.days
temp_df=np.where(temp_df>=0,np.where(temp_df>-366,1,0))
df_pat["hosp_past_year"]=temp_df.sum(axis=0)
df_fin=df_fin.append(df_pat)
任何帮助将不胜感激!
解决方法
以下会产生你想要的结果,
res = df.groupby(['patient_id',df['hospitalization_date'].dt.year]).sum().reset_index()
pd.merge(df,res,how='left',left_on= ['patient_id',df['hospitalization_date'].dt.year],right_on = ['patient_id','hospitalization_date'],suffixes=['_x','_sum'])[['patient_id','hospitalization_date_x','previous_year_x','previous_year_sum']]
输出:
patient_id hospitalization_date_x previous_year_x previous_year_sum
0 1 2020-11-02 2 2
1 1 2019-12-20 1 1
2 1 2019-11-30 0 1
3 1 2015-01-01 0 0
4 2 2019-04-17 1 1
5 2 2018-11-05 0 0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。