微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

统计上一年度的实例

如何解决统计上一年度的实例

我有一个非常大的住院数据集。对于每次录取,我想知道前一年发生的录取数量。 我的数据集采用数据框的形式,包括患者 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 举报,一经查实,本站将立刻删除。