因此,我有一个时间序列数据框,其中一栏既有患者ID,又一栏有Years(1-3)。我想使用熊猫做的是,对于每个唯一的患者ID,只保留所有1-3年级都有条目的行。
IN
ID Year
111 1
111 2
111 3
222 1
222 2
333 1
333 2
333 3
输出
ID Year
111 1
111 2
111 3
333 1
333 2
333 3
答案 0 :(得分:2)
它可以像这样一行完成:
df = pd.DataFrame({
"ID": [111, 111, 111, 222, 222, 333, 333, 333],
"Year": [1, 2, 3, 1, 2, 1, 2, 3]})
# filter unique IDs that doesn't contain [1, 2, 3]
df = df.groupby('ID').filter(lambda g: (sorted(set(g["Year"].values)) == [1,2,3]))
print(df)
# ID Year
#0 111 1
#1 111 2
#2 111 3
#5 333 1
#6 333 2
#7 333 3
答案 1 :(得分:0)
假设年只能是 1 到 3 ,则可以运行:
result = df.groupby('ID').filter(lambda grp: grp.Year.unique().size == 3)
需要 unique()
来过滤掉例如3行
特定的 ID ,但全部来自同一 Year 。