You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 06:06:05