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

如何用循环从Pandas DataFrame按不同数量抽取无放回随机样本?

解决Pandas无放回抽样的列表存储问题

错误原因

你初始化的sample是空列表,sample[i]试图访问第i个元素,但此时列表中没有任何元素,因此触发IndexError。Python的列表完全可以存储DataFrame,和R的列表用法一致,只是你用错了元素添加方式。

正确实现方式

方式1:各次抽样独立(基于原DataFrame)

如果每次抽样都从完整的原数据中抽取无放回样本(不同批次样本可能重叠),可以直接用append向列表添加DataFrame:

number = [10,20,30,40,50]
sample = []
for n in number:
    # replace=False 确保无放回抽样,默认就是False,可省略
    sample.append(data.sample(n=n, replace=False))

或者用更简洁的列表推导式:

number = [10,20,30,40,50]
sample = [data.sample(n=n, replace=False) for n in number]

方式2:全局无放回抽样(依次从剩余数据抽取)

如果需要所有批次的样本完全不重复(第一次抽10条后,从剩余数据抽20条,以此类推),需要每次抽样后移除已选中的样本:

number = [10,20,30,40,50]
sample = []
remaining_data = data.copy()  # 复制原数据,避免修改原始DataFrame
for n in number:
    sampled_df = remaining_data.sample(n=n, replace=False)
    sample.append(sampled_df)
    # 从剩余数据中删除已抽中的样本
    remaining_data = remaining_data.drop(sampled_df.index)

注意:这种方式要求原DataFrame的行数≥150(10+20+30+40+50),否则会因数据不足报错。

内容的提问来源于stack exchange,提问作者Programming Noob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:05:54