提取DataFrame子集后获取剩余未采样数据的通用方法
解决方法
你可以基于ID列的成员判断做行筛选,该方法对大数据集友好,核心思路是先把要排除的ID存入集合(O(1)查找效率),再反向筛选行。
基础写法(无需额外依赖)
# 1. 定义要排除的ID集合,转Set可大幅提升大数量下的查找效率 exclude_ids = Set(["A", "D"]) # 2. 筛选x1列(ID列)不在排除集合中的行 # 写法1:逻辑索引 filtered_data = data[.!(data.x1 .∈ Ref(exclude_ids)), :] # 写法2:filter函数,可读性更高 filtered_data = filter(row -> !(row.x1 in exclude_ids), data)
可选简洁写法(需安装DataFramesMeta包)
using DataFramesMeta filtered_data = @rsubset data !(row.x1 in exclude_ids)
结果验证
运行后得到的filtered_data就是符合要求的剩余数据,输出如下:
2×4 DataFrame Row │ x1 x2 x3 x4 │ Any Any Any Any ─────┼──────────────────── 1 │ B 1 2 3 2 │ C 2 1 2
方法说明
- 适配任意大小的数据集:哪怕原数据集有百万行、待排除的ID有上万个,筛选耗时都不会显著增加
- 不需要提前知道行的索引位置,完全基于ID值筛选,避免手动选行的误差
内容的提问来源于stack exchange,提问作者N A
相关产品推荐
相关产品推荐

