Pandas采样拆分DataFrame后如何获取剩余未选中的数据行?
实现方案
方案1:直接删除已采样行(最适配现有代码,索引唯一时优先用)
你已经拿到80%的采样结果,直接删除原数据中对应索引的行即可拿到剩余20%,和你期望的df - df_80_split逻辑完全一致:
df_20_split = df.drop(df_80_split.index)
注意:如果你的DataFrame存在重复索引,该方法会删掉所有匹配索引的行,导致结果不符合预期,建议用下面的方案2
方案2:布尔索引筛选(兼容重复索引场景)
通过判断索引是否在采样结果中生成布尔掩码,取反后筛选剩余行:
# 生成是否属于80%采样集的掩码 is_80 = df.index.isin(df_80_split.index) # 取反筛选剩余20%数据 df_20_split = df[~is_80]
方案3:一步完成拆分(避免多步操作误差)
如果还没执行采样操作,可以直接生成随机掩码一次性拆分两份数据,和你设置的random_state效果一致:
import numpy as np # 固定随机种子保证可复现 np.random.seed(200) # 生成长度和原数据一致的布尔数组,80%为True mask = np.random.rand(len(df)) < 0.8 df_80_split = df[mask] df_20_split = df[~mask]
方案4:训练测试集拆分场景推荐
如果你是在做机器学习的数据集拆分,更推荐使用sklearn封装好的拆分工具,支持分层采样、特征标签同步拆分等功能:
from sklearn.model_selection import train_test_split # test_size指定剩余集比例,random_state保证可复现 df_80_split, df_20_split = train_test_split(df, test_size=0.2, random_state=200)
内容的提问来源于stack exchange,提问作者Alex K
相关产品推荐
相关产品推荐

