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

pandas分组抽样replace=False样本量不足时如何获取全部现有样本

实现方法

可以通过自定义分组抽样逻辑实现,核心是对每个分组动态判断抽样数量,行数≥30时抽30行,不足30时随机返回全部分组行,不会触发报错也无需有放回抽样。

简洁版写法(pandas全版本支持)

df = df.groupby('ID', group_keys=False).apply(
    lambda x: x.sample(n=min(len(x), 30))
).reset_index(drop=True)

自定义函数写法(适合需要附加额外处理逻辑的场景)

def group_sample(group, sample_n=30):
    # 分组行数大于等于抽样数时抽sample_n行,否则随机返回全组
    if len(group) >= sample_n:
        return group.sample(n=sample_n)
    else:
        return group.sample(frac=1)

df = df.groupby('ID', group_keys=False).apply(group_sample).reset_index(drop=True)
逻辑说明
  • 对每个ID分组,先取分组行数和30的较小值作为实际抽样数,避免抽样数大于样本量的报错
  • 不足30行的分组会返回全组随机打乱后的结果,既满足无放回要求,也避免了head(30)只能取前N行的非随机问题
  • 代码中的group_keys=False用于避免分组后产生额外的ID索引层级,reset_index(drop=True)用于重置整体索引,不需要保留原始索引可删除这两个参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:36:06