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

时间:2020-06-04 17:19:13

标签: python pandas data-science

因此,我有一个时间序列数据框,其中一栏既有患者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

2 个答案:

答案 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