【问题标题】:counting instances in previous year计算上一年的实例
【发布时间】:2021-05-02 10:42:35
【问题描述】:

我有一个非常庞大的入院数据集。对于每次入学,我想知道前一年的入学人数。 我的数据集采用数据框形式,包括患者 ID 和住院日期。 我想要一个额外的列来说明上一年的录取人数 - 例如,下表中的“hosp_past_year”列。

patient_id hospitalization_date hosp_past_year
1 Nov 2 2020 2
1 Dec 20 2019 1
1 Nov 30 2019 1
1 Jan 1 2015 0
2 April 17 2019 1
2 Nov 5 2018 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,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)

任何帮助将不胜感激!

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    以下将产生您想要的结果,

    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
    

    【讨论】:

    • 感谢@k33da_the_bug。但是前一年的住院治疗(现在是“hosp_past_year”)是我正在寻找的结果列......不要在代码中使用。我现在对其进行了编辑以使其更清晰
    猜你喜欢
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多