如何筛选pandas DataFrame中拥有全部时间点数据的个体记录
实现方案
方案1:groupby+filter 简洁写法
直接按用户id分组,筛选出拥有全部6个时间点的分组即可,两种写法按需选择:
# 写法A:适合确认无重复时间点的场景,直接判断分组行数 filtered_df = df.groupby("id").filter(lambda x: len(x) == 6) # 写法B:更严谨,避免同id下有重复时间点的异常情况,统计唯一时间点数量 filtered_df = df.groupby("id").filter(lambda x: x["timepoint"].nunique() == 6)
方案2:先查有效id再过滤(大数据量下效率更高)
先计算所有符合要求的id列表,再通过布尔索引过滤原数据:
# 统计每个id对应的唯一时间点数量 id_time_cnt = df.groupby("id")["timepoint"].nunique() # 提取有6个完整时间点的id列表 valid_ids = id_time_cnt[id_time_cnt == 6].index # 过滤原数据 filtered_df = df[df["id"].isin(valid_ids)]
运行上述任意一种方案得到的filtered_df就是你需要的结果,你可以通过print(filtered_df)验证输出是否符合预期。
内容的提问来源于stack exchange,提问作者Dr Wampa
相关产品推荐
相关产品推荐

