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

如何在Pandas DataFrame中为每个分组随机选取n行序列?

按分组随机选取指定行数的DataFrame行

问题场景

假设我们有如下DataFrame:

import pandas as pd

raw_data = {
    'subject_id': ['1', '1', '1', '1', '2','2','2','2','2'],
    'first_name': ['Alex', 'Amy', 'Allen', 'Alice', 'Brian','Bob','Bill','Brenda','Brett']}
df = pd.DataFrame(raw_data, columns = ['subject_id', 'first_name'])

需要实现:按subject_id分组,为每个组随机选取n行(比如n=2),期望输出类似:

subject_id first_name
1          1        Amy
2          1       Allen
7          2      Brenda
8          2       Brett

此前找到的相关方案未覆盖分组场景,因此需要针对分组后的随机采样实现。

解决方案

使用Pandas的groupby()结合sample()方法即可实现,这是最简洁高效的方式:

核心代码

# 每个subject_id随机选2行,默认不重复采样
result = df.groupby('subject_id').sample(n=2)

# 如果需要固定随机结果(方便复现),指定random_state参数
result = df.groupby('subject_id').sample(n=2, random_state=42)

# 若允许同一组内重复选取行,设置replace=True(适用于分组行数不足n的场景)
result = df.groupby('subject_id').sample(n=2, replace=True)

代码说明

  • groupby('subject_id'):按指定列完成分组
  • sample(n=2):对每个分组随机选取2行,默认replace=False(不允许重复选取同一行)
  • random_state:设置随机种子,确保每次运行得到相同的随机结果
  • replace=True:开启放回采样,解决分组内行数不足n时的采样需求

输出示例

执行df.groupby('subject_id').sample(n=2, random_state=42)后,结果如下:

subject_id first_name
3          1       Alice
1          1        Amy
5          2         Bob
8          2       Brett

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:15:39