python - Pandas:根据另一列过滤 groupby 重复的行
问题描述
我有以下数据框,并按 Patientid 对它们进行分组。现在我想向具有相同(重复)就诊日期的患者显示他们的药物列不是 NA。
import pandas as pd
df = pd.DataFrame({'patientid':["s1001","s1002","s1001","s1003","s1001","s1002","s1003","s1001","s1002","s1003"],
'visitdate':["2016/01/01","2017/05/01","2016/01/01","2016/08/01","2019/01/01","2016/01/01","2016/01/01","2015/01/01","2016/03/01","2016/05/01"],
'medication1':["Copaxone","Copaxone","NA","NA","NA","NA","Rituximab","Rituximab","Rebif","Copaxone"],
'medication2':["NA","NA","Rebif","Rituximab","Copaxone","NA","NA","NA","NA","Copaxone"]
})
例如,患者 s1001 有两个重复的访问日期 2016/01/01,两个日期的药物 1 和药物 2 都不为空。
grouped = df.groupby("patientid")
for key, group in grouped:
print(key)
print(group)
s1001
patientid visitdate medication1 medication2
0 s1001 2016/01/01 Copaxone NA
2 s1001 2016/01/01 NA Rebif
4 s1001 2019/01/01 NA Copaxone
7 s1001 2015/01/01 Rituximab NA
s1002
patientid visitdate medication1 medication2
1 s1002 2017/05/01 Copaxone NA
5 s1002 2016/01/01 NA NA
8 s1002 2016/03/01 Rebif NA
s1003
patientid visitdate medication1 medication2
3 s1003 2016/08/01 NA Rituximab
6 s1003 2016/01/01 Rituximab NA
9 s1003 2016/05/01 Copaxone Copaxone
如何过滤 groupby 以仅显示重复的访问日期。我试过下面的代码:
df.groupby(by= 'patientid', dropna=False).filter(lambda x: (x.visitdate.duplicated()).any())
patientid visitdate medication1 medication2
0 s1001 2016/01/01 Copaxone NA
2 s1001 2016/01/01 NA Rebif
4 s1001 2019/01/01 NA Copaxone
7 s1001 2015/01/01 Rituximab NA
但它显示了患者 s1001 的所有就诊日期。有什么想法吗?
解决方案
推荐阅读
- java - 在启用片段之前无法启动自动完成活动
- python-3.x - 输入事件时不弹出工具提示
- ios - 如何在 LineChart 中为突出显示的值绘制圆圈
- javascript - 通过单击按钮拼接使用 DOM 呈现的数组(Vanilla Js)
- azure - 了解如何在 Azure AD 中使用范围进行用户授权
- python - Python selenium 浏览器 firefox
- c# - 如何在 Xamarin.iOS 中使用数据保护?
- python - Azure Webjob ImportError:没有名为 email_validator 的模块
- python - 重复排列?
- c++ - (C++ 14) 重载 new 运算符以分配比对象大小更多的连续空间