我对Python还是很陌生,我正在尝试计算患者是否在30天内重新入院。
数据为Pandas数据框形式,其中包含患者ID,到达日期,出发日期和状态(出院,入院,未等待)的列。该问题与具有相同要求的上述问题相似,但我需要Python中的代码。
我只需要一栏再入院(30天再入院状态)。感谢您对代码翻译的任何帮助。预先感谢。
答案 0 :(得分:2)
您可以使用以下内容:
df.groupby('Patient').apply(lambda x : (x['Admission Date'].\
shift(-1)-x['Discharge date']).dt.days.le(30).astype(int)).reset_index(drop=True)
完整代码:
考虑df如下:
Visit Patient Admission Date Discharge date
0 1 1 2015-01-01 2015-01-02
1 2 2 2015-01-01 2015-01-01
2 3 3 2015-01-01 2015-01-02
3 4 1 2015-01-09 2015-01-09
4 5 2 2015-04-01 2015-04-05
5 6 1 2015-05-01 2015-05-01
df[['Admission Date','Discharge date']] = df[['Admission Date','Discharge date']].\
apply(lambda x: pd.to_datetime(x))
df = df.sort_values(['Patient','Admission Date']) #Thanks @Jondiedoop
df['Readmit30']=df.groupby('Patient').apply(lambda x : (x['Admission Date'].\
shift(-1)-x['Discharge date']).dt.days.le(30).astype(int)).reset_index(0).drop('Patient',1)
print(df)
Visit Patient Admission Date Discharge date Readmit30
0 1 1 2015-01-01 2015-01-02 1
3 4 1 2015-01-09 2015-01-09 0
5 6 1 2015-05-01 2015-05-01 0
1 2 2 2015-01-01 2015-01-01 0
4 5 2 2015-04-01 2015-04-05 0
2 3 3 2015-01-01 2015-01-02 0
答案 1 :(得分:0)
您也可以尝试这个(不知道为什么上一个为我提供了错误的重新录入标记): 在visit_start_date排序后
visits_pandas_df.groupby('PatientId').apply(lambda x: (((x['visit_start_date'].shift(-1)-x['visit_end_date']).dt.days.shift(1).le(30)) ).astype(int)).values
只有一天差异的访问不计入重新接纳。因此,您还需要检查逻辑。