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

Pandas多维度分组随机抽样:每组抽取指定数量样本实现方案

按多分组随机抽取指定数量数据行的实现方案

看来你已经找对了方向,用groupby来处理分组抽样完全可行!我来帮你把这个方案补全,完美适配你的需求——按type、Class、image name每个分组随机抽取2条数据。

首先先确认下你的示例数据结构:

import numpy as np
import pandas as pd
# Setup fake data.
np.random.seed([3, 1415])
df = pd.DataFrame({
    'Class': list('AAAAAAAAAABBBBBBBBBB'),
    'type': (['short']*5 + ['long']*5) *2,
    'image name': (['image01']*2 + ['image02']*2)*5,
    'Value2': np.random.random(20)
})

接下来就是完整的分组抽样代码,直接补全你没写完的部分:

# 按指定字段分组,每个组随机抽取2条数据
df2 = df.groupby(['type', 'Class', 'image name']).apply(lambda x: x.sample(n=2, random_state=3)).reset_index(drop=True)

代码细节解释

  • groupby(['type', 'Class', 'image name']):按照你需要的三个维度完成分组,确保每个分组都是唯一的type+Class+image name组合
  • .apply(lambda x: x.sample(n=2, random_state=3)):对每个分组执行抽样操作,n=2指定抽取2条数据;加上random_state是为了固定抽样结果,保证每次运行都得到相同的随机样本(如果不需要固定随机性,可以去掉这个参数)
  • .reset_index(drop=True):重置结果的索引,避免分组带来的多级索引干扰后续的数据处理

如果你的数据里存在某些分组的条目不足2条的情况,怕触发报错的话,可以改成下面的写法,自动抽取该分组的所有数据:

df2 = df.groupby(['type', 'Class', 'image name']).apply(lambda x: x.sample(n=min(2, len(x)), random_state=3)).reset_index(drop=True)

这样不管分组里有1条还是更多数据,都能安全完成抽样啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:40:34