如何使用sample函数将pd.Series拆分为两个无重叠且并集为原序列的样本
原代码问题说明
两次独立调用sample()方法都是从完整的原始Series中抽样,即使设置了相同的random_state,也仅能保证两次抽样的随机种子一致,不会自动排除已抽取的元素,因此必然会出现样本重叠的情况。
无重叠样本拆分方案
方案1:先抽小样本,剩余部分自动作为第二个样本
无需额外依赖,逻辑简单直观:
import pandas as pd example = pd.Series([1,2,3,4,5,6]) # 抽取2个样本作为第一组 example1 = example.sample(n=2, replace=False, random_state=12345) # 从原Series中剔除第一组的索引,得到剩余4个无重叠样本作为第二组 example2 = example.drop(example1.index)
方案2:交叉验证场景专用拆分方法
如果是为交叉验证拆分训练/测试集,直接使用sklearn的train_test_split方法更规范,自动保证无重叠、并集覆盖全量数据:
import pandas as pd from sklearn.model_selection import train_test_split example = pd.Series([1,2,3,4,5,6]) # test_size指定小样本占比,返回结果顺序为「大样本,小样本」 example2, example1 = train_test_split(example, test_size=2/6, random_state=12345)
两种方案最终得到的example1和example2都满足无重叠、并集等于原始Series的要求,可以直接用于后续交叉验证步骤。
内容的提问来源于stack exchange,提问作者Nikita Tsekhanovich
相关产品推荐
相关产品推荐

