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

如何在Pandas DataFrame中判断住院时段与用药时段是否存在重叠

判断住院时段与用药时段是否重叠的解决方案

嘿,我来帮你搞定这个问题!你需要新增一个布尔列来标记患者住院期间是否接受过药物治疗,核心就是判断住院时段和用药时段是否存在任何时间重叠——哪怕只有1秒也算数。

核心判断逻辑

两个时间区间[A_start, A_end]和[B_start, B_end]存在重叠的关键条件是:

A_start < B_end 且 B_start < A_end

这个逻辑能覆盖所有重叠场景:不管是一个时段完全包含另一个,还是两个时段部分交叉,只要满足这个条件就说明有重叠。同时我们还要处理NaT的情况——如果没有用药记录(start_med或end_med为NaT),直接标记为False即可。

代码实现

直接用pandas的布尔掩码就能搞定,代码如下:

import pandas as pd

# 你的原始DataFrame
df = pd.DataFrame({'admission_timestamp': ['2021-01-17 17:45:00', '2020-03-31 23:32:00', '2020-03-27 18:20:00', '2020-04-17 18:12:00', '2020-03-19 19:12:00'], 'end_period': ['2021-01-18 17:45:00', '2020-04-01 23:32:00', '2020-03-28 18:20:00', '2020-04-18 18:12:00', '2020-03-20 19:12:00'], 'start_med': ['NaT', '2020-04-01 00:00:00', '2020-03-27 19:00:00', '2020-04-17 18:39:24', 'NaT'], 'end_med': ['NaT', '2020-04-14 21:00:00', '2020-04-05 00:00:00', '2020-05-06 22:07:29', 'NaT']})
# 确保所有时间列是datetime类型(如果还没转换的话)
df[['admission_timestamp', 'end_period', 'start_med', 'end_med']] = df[['admission_timestamp', 'end_period', 'start_med', 'end_med']].apply(pd.to_datetime)

# 1. 筛选出有有效用药记录的行(排除NaT的情况)
has_valid_med = ~df['start_med'].isna() & ~df['end_med'].isna()

# 2. 判断住院时段和用药时段是否重叠
is_overlap = (df['admission_timestamp'] < df['end_med']) & (df['start_med'] < df['end_period'])

# 3. 合并条件,得到最终的布尔列
df['received_medidation'] = has_valid_med & is_overlap

运行结果

执行后你的DataFrame会新增目标列,结果如下:

admission_timestampend_periodstart_medend_medreceived_medidation
2021-01-17 17:45:002021-01-18 17:45:00NaTNaTFalse
2020-03-31 23:32:002020-04-01 23:32:002020-04-01 00:00:002020-04-14 21:00:00True
2020-03-27 18:20:002020-03-28 18:20:002020-03-27 19:00:002020-04-05 00:00:00True
2020-04-17 18:12:002020-04-18 18:12:002020-04-17 18:39:242020-05-06 22:07:29True
2020-03-19 19:12:002020-03-20 19:12:00NaTNaTFalse

逻辑验证

  • 第2行:住院时段到4月1日23:32,用药从4月1日00:00开始,两个时段有重叠,标记为True
  • 第3行:住院时段到3月28日18:20,用药从3月27日19:00开始,明显重叠,标记为True
  • 第4行:用药从住院当天18:39开始,在住院时段内,标记为True
  • 第1、5行:无用药记录,标记为False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 08:57:46