如何从Pandas DataFrame中筛选同时使用两种药物的患者数据
问题原因
你之前用pd.concat的join="inner"达不到预期效果,是因为concat的内连接逻辑是按列名对齐拼接,不会按patient字段匹配两个表中同时存在的患者,仅会保留两个输入表都有的列名,所以只是把两个表的行拼到一起了。
解决方案
方法1:基于你已经生成的df1、df2实现
先取两个表中患者ID的交集,再从原表中筛选这些患者的全部记录即可:
# 取同时出现在df1和df2中的患者ID common_patients = df1['patient'][df1['patient'].isin(df2['patient'])].unique() # 从原表筛选对应患者的所有记录 result = df[df['patient'].isin(common_patients)]
方法2:更简洁的分组筛选写法(无需提前拆分df1、df2)
直接对患者ID分组,筛选同时包含A、B两种用药记录的分组即可:
result = df.groupby('patient').filter(lambda x: {'A', 'B'}.issubset(x['drug'].tolist()))
两种方法输出的结果都和你预期的一致:
patient drug 0 1001 A 1 1001 B 4 1004 A 5 1004 B
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

