Python如何从DataFrame中无重复随机抽取6个固定大小子样本
原代码问题分析
- 你已经通过
df.sample()得到了乱序的抽样结果df_,但后续分片操作仍然调用了原始有序的df做索引切割,得到的自然是原顺序的分片 - 需求是6个各100条的子样本,总抽样量应为600,原代码中
df.sample(n=6000)的参数不符合需求,且循环中range的上界误用了原始df的长度,会导致分片大小不符合预期
修正后实现代码
# 1. 计算总抽样量:6个子样本 × 每个100条 total_count = 6 * 100 # 2. 从原df无重复随机抽取足量数据,得到乱序的抽样结果 sampled_all = df.sample(n=total_count, replace=False) # replace=False为默认值,显式标注更清晰;可加random_state参数固定随机结果方便复现 # 3. 按固定大小切割乱序样本,得到6个无重复的随机子样本 subsample_size = 100 chunks = [] for i in range(0, total_count, subsample_size): chunks.append(sampled_all.iloc[i:i+subsample_size]) # 调用示例:第一个子样本为 chunks[0],第二个为chunks[1],以此类推
结果校验(可选)
如果需要确认结果符合要求,可运行以下代码校验:
# 校验每个子样本大小是否为100 for i, subsample in enumerate(chunks): assert len(subsample) == 100, f"子样本{i}大小不符合要求" print("所有子样本大小校验通过") # 校验所有子样本无重复行 all_index = [] for s in chunks: all_index.extend(s.index.tolist()) assert len(set(all_index)) == 600, "子样本存在重复数据" print("所有子样本无重复校验通过")
内容的提问来源于stack exchange,提问作者Ankita
相关产品推荐
相关产品推荐

