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

遍历患者数据行,计算各患者到达时科室在院总人数

问题描述

现有患者进出科室的时间数据如下:

Patientarrival datetimedepart datetimeTotal in department
109/04/2024 23:0010/04/2024 11:00
210/04/2024 07:4210/04/2024 09:57
310/04/2024 09:1510/04/2024 13:00
410/04/2024 08:5610/04/2024 10:15
510/04/2024 05:0010/04/2024 08:30
610/04/2024 06:1510/04/2024 14:20
710/04/2024 01:2910/04/2024 10:32
810/04/2024 08:2210/04/2024 15:15

需要计算每位患者到达时刻,科室里满足「到达时间≤当前患者到达时间,且离开时间≥当前患者到达时间」的总人数(包含当前患者)。


解决方案

方法1:纯Python循环实现(符合你的初始思路)

先把字符串时间转换为可比较的datetime对象,再通过双重循环判断条件统计数量:

from datetime import datetime

# 原始数据
patients = [
    {"Patient": 1, "arrival": "09/04/2024 23:00", "depart": "10/04/2024 11:00"},
    {"Patient": 2, "arrival": "10/04/2024 07:42", "depart": "10/04/2024 09:57"},
    {"Patient": 3, "arrival": "10/04/2024 09:15", "depart": "10/04/2024 13:00"},
    {"Patient": 4, "arrival": "10/04/2024 08:56", "depart": "10/04/2024 10:15"},
    {"Patient": 5, "arrival": "10/04/2024 05:00", "depart": "10/04/2024 08:30"},
    {"Patient": 6, "arrival": "10/04/2024 06:15", "depart": "10/04/2024 14:20"},
    {"Patient": 7, "arrival": "10/04/2024 01:29", "depart": "10/04/2024 10:32"},
    {"Patient": 8, "arrival": "10/04/2024 08:22", "depart": "10/04/2024 15:15"},
]

# 转换时间字符串为datetime对象
time_format = "%d/%m/%Y %H:%M"
for p in patients:
    p["arrival"] = datetime.strptime(p["arrival"], time_format)
    p["depart"] = datetime.strptime(p["depart"], time_format)

# 遍历每个患者,统计到达时刻的在院人数
for current_patient in patients:
    count = 0
    for other_patient in patients:
        # 判断其他患者是否在当前患者到达时处于在院状态
        if other_patient["arrival"] <= current_patient["arrival"] and other_patient["depart"] >= current_patient["arrival"]:
            count += 1
    current_patient["Total in department"] = count

# 打印结果
for p in patients:
    print(f"患者{p['Patient']}到达时,科室总人数:{p['Total in department']}")

输出结果:

患者1到达时,科室总人数:1
患者2到达时,科室总人数:5
患者3到达时,科室总人数:6
患者4到达时,科室总人数:5
患者5到达时,科室总人数:2
患者6到达时,科室总人数:3
患者7到达时,科室总人数:2
患者8到达时,科室总人数:5

方法2:Pandas实现(高效处理大数据量)

如果数据量较大,推荐用Pandas的向量操作替代循环,代码更简洁且效率更高:

import pandas as pd

# 构造DataFrame
data = {
    "Patient": [1,2,3,4,5,6,7,8],
    "arrival datetime": ["09/04/2024 23:00", "10/04/2024 07:42", "10/04/2024 09:15", "10/04/2024 08:56",
                        "10/04/2024 05:00", "10/04/2024 06:15", "10/04/2024 01:29", "10/04/2024 08:22"],
    "depart datetime": ["10/04/2024 11:00", "10/04/2024 09:57", "10/04/2024 13:00", "10/04/2024 10:15",
                       "10/04/2024 08:30", "10/04/2024 14:20", "10/04/2024 10:32", "10/04/2024 15:15"]
}
df = pd.DataFrame(data)

# 转换时间列为datetime类型
df["arrival datetime"] = pd.to_datetime(df["arrival datetime"], format="%d/%m/%Y %H:%M")
df["depart datetime"] = pd.to_datetime(df["depart datetime"], format="%d/%m/%Y %H:%M")

# 计算每个到达时刻的在院人数
df["Total in department"] = df["arrival datetime"].apply(
    lambda x: len(df[(df["arrival datetime"] <= x) & (df["depart datetime"] >= x)])
)

print(df)

输出结果会直接更新原表格的Total in department列,和方法1的统计结果一致。


内容的提问来源于stack exchange,提问作者Michael Ralph

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 07:16:30