You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 10:05:22