如何在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
相关产品推荐
相关产品推荐

