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

如何在Pandas中筛选同一天有三类科室就诊记录的患者数据

解决方法

错误原因分析

你之前用str.contains报错是因为分组后的department列是列表类型,而str.contains仅适用于字符串类型数据,对列表调用会返回NaN,导致loc索引时找不到对应键值,触发KeyError。

简便实现方案

方案一:分组后检查集合包含关系

先按name和date分组,通过集合判断每组是否覆盖所有目标科室:

import pandas as pd

df = pd.DataFrame({'name': ['Bob', 'Charlie', 'Bob', 'Sam', 'Bob', 'Sam', 'Chris'],
                   'date': ['06-02-2023', '01-02-2023', '06-02-2023', '20-12-2022', '06-02-2023','08-06-2015', '26-08-2020'],
                   'department': ['urology', 'urology', 'oncology', 'primary care', 'radiation', 'primary care', 'oncology']})

# 定义需要匹配的科室集合
target_depts = {'urology', 'oncology', 'radiation'}

# 分组筛选出包含所有目标科室的记录,再去重保留姓名和日期
result = df.groupby(['name', 'date']).filter(lambda x: target_depts.issubset(x['department']))
result = result[['name', 'date']].drop_duplicates().reset_index(drop=True)

print(result)

方案二:去重计数筛选

先去重避免同一科室重复统计,再通过计数筛选出刚好包含三个目标科室的记录:

import pandas as pd

df = pd.DataFrame({'name': ['Bob', 'Charlie', 'Bob', 'Sam', 'Bob', 'Sam', 'Chris'],
                   'date': ['06-02-2023', '01-02-2023', '06-02-2023', '20-12-2022', '06-02-2023','08-06-2015', '26-08-2020'],
                   'department': ['urology', 'urology', 'oncology', 'primary care', 'radiation', 'primary care', 'oncology']})

target_depts = {'urology', 'oncology', 'radiation'}

# 去重后筛选目标科室记录
unique_filtered = df.drop_duplicates(subset=['name', 'date', 'department']).query("department in @target_depts")
# 分组计数,筛选出计数为3的(即三个目标科室都存在)
result = unique_filtered.groupby(['name', 'date']).size().reset_index(name='count')
result = result[result['count'] == 3][['name', 'date']]

print(result)

运行结果

两种方案最终输出一致:

name        date
0    Bob  06-02-2023

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 22:20:41