在Pandas中跨行搜索多次遭遇

qni6mghb  于 2023-02-11  发布在  其他
关注(0)|答案(1)|浏览(111)

我尝试获取患者数据的 Dataframe ,并创建一个新的df,其中包括他们的姓名和日期,如果他们在同一天遇到三个服务。
首先我有一个 Dataframe

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']})

我尝试使用agg函数对名称和日期进行group by以创建列表

df_group = df.groupby(['name', 'date']).agg({'department': pd.Series.unique})

对于bob来说,这个部门包括泌尿科、肿瘤科、放射科。
现在,当我试图搜索列表中的部门,然后只找到包含有问题的部门的行时,我得到了一个错误。

df_group.loc[df_group['department'].str.contains('primary care')]

例如,导致KeyError:'[nan nan nan nan]不在索引中'
我假设有一个更简单的方法,但最终,我只想得到一个 Dataframe 的人与日期时,他们有一个遇到泌尿科,肿瘤科和放射科。在上述df将导致:
姓名日期Bob 2023年2月6日

goucqfw6

goucqfw61#

轻松解决

# define a set of departments to check for
s = {'urology', 'oncology', 'radiation'}

# groupby and aggregate to identify the combination
# of name and date that has all the required departments
out = df.groupby(['name', 'date'], as_index=False)['department'].agg(s.issubset)
结果
# out
      name        date  department
0      Bob  06-02-2023        True
1  Charlie  01-02-2023       False
2    Chris  26-08-2020       False
3      Sam  08-06-2015       False
4      Sam  20-12-2022       False

# out[out['department'] == True]
  name        date  department
0  Bob  06-02-2023        True

相关问题