Python 如何基于两列过滤时间序列数据帧?

Python 如何基于两列过滤时间序列数据帧?,python,pandas,data-science,Python,Pandas,Data Science,所以我有一个时间序列数据框,它在一列中包含患者ID,在另一列中包含年份(1-3)。我想使用pandas做的是,对于每个唯一的患者Id,只保留在所有1-3年中都有条目的行 在 出去 可以在一行中完成,如下所示: 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

所以我有一个时间序列数据框,它在一列中包含患者ID,在另一列中包含年份(1-3)。我想使用pandas做的是,对于每个唯一的患者Id,只保留在所有1-3年中都有条目的行

出去


可以在一行中完成,如下所示:

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

可以在一行中完成,如下所示:

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到3年,您可以运行:

result = df.groupby('ID').filter(lambda grp: grp.Year.unique().size == 3)
需要使用
unique()
来过滤案例,例如,当有3行 特定ID,但都来自同一年。

假设该年只能是1到3,您可以运行:

result = df.groupby('ID').filter(lambda grp: grp.Year.unique().size == 3)
需要使用
unique()
来过滤案例,例如,当有3行 特定ID,但都来自同一年