Python中日期与日期列表的差值计算及条件判断问题
新冠患者阳性日期与住院日期的判断处理方案
一、提取整数天数差值的核心解决方法
你遇到的带小时的嵌套结果,大概率是因为部分日期仍保留了datetime.datetime类型(含时分秒),而非纯date对象。只需确保所有参与计算的日期都是无时间部分的date类型,再通过timedelta.days即可直接获取整数天数:
单条数据处理示例(Python)
from datetime import date, datetime # 1. 确保入院/出院日期为date类型(若原数据是datetime则转换) admission_date = admission_date.date() if isinstance(admission_date, datetime) else admission_date discharge_date = discharge_date.date() if isinstance(discharge_date, datetime) else discharge_date # 2. 批量转换阳性日期列表为date类型 positive_dates = [ d.date() if isinstance(d, datetime) else d for d in positive_dates ] # 3. 计算每个阳性日期与入院日期的整数天数差 days_diffs = [(d - admission_date).days for d in positive_dates]
批量数据集处理示例(Pandas)
若用Pandas处理整列数据,先统一日期类型:
import pandas as pd # 把入院/出院列转成date类型 df['DATE OF ADMISSION'] = pd.to_datetime(df['DATE OF ADMISSION']).dt.date df['DATE OF DISCHARGE'] = pd.to_datetime(df['DATE OF DISCHARGE']).dt.date
二、完成三项日期判断的代码实现
基于处理后的纯date类型日期,直接通过any()函数快速判断是否存在符合条件的阳性日期:
判断1:是否存在入院前15天内的阳性日期
has_pre_admission_pos = any( 0 <= (admission_date - d).days <= 15 for d in positive_dates )
判断2:是否存在住院期间(入院至出院区间)的阳性日期
has_in_hospital_pos = any( admission_date <= d <= discharge_date for d in positive_dates )
判断3:是否存在出院后15天内的阳性日期
has_post_discharge_pos = any( 0 <= (d - discharge_date).days <= 15 for d in positive_dates )
批量数据集的批量判断
def check_positive_status(row): pos_dates = row['LIST OF POSITIVE DATES'] adm = row['DATE OF ADMISSION'] disch = row['DATE OF DISCHARGE'] # 转换阳性日期列表为date类型 pos_dates = [d.date() if isinstance(d, pd.Timestamp) else d for d in pos_dates] return pd.Series([ any(0 <= (adm - d).days <=15 for d in pos_dates), any(adm <= d <= disch for d in pos_dates), any(0 <= (d - disch).days <=15 for d in pos_dates) ], index=['pre_admission_pos', 'in_hospital_pos', 'post_discharge_pos']) # 新增三列存储判断结果 df[['pre_admission_pos', 'in_hospital_pos', 'post_discharge_pos']] = df.apply(check_positive_status, axis=1)
内容的提问来源于stack exchange,提问作者Carmen Morales
相关产品推荐
相关产品推荐

